// export testing ; export you , russians , nature , you_alt , russians_alt ; export Heike , Dwayne , Oswald , Kurt , Gonzo , Gensher , Gossudarov , scout , traitors_leader , Willard ; export ai_soldiers , ai_engineers , ai_mechanics_defend , ai_mechanics_attack , ai_scientists , ai_commander , ai_depot , ai_labs , ai_siberite_mines ; export ai_power_plants , ai_buildings_locations , ai_vehicles_defend , ai_vehicles_attack , ai_vehicle_pullback_hexes , ai_human_pullback_hex ; export ai_building_under_construction , ai_heal_these_humans , ai_all_buildings , ai_building_constructor , ai_vehicle_being_moved ; export ai_upcoming_building_data , ai_facts , ai_armouries , ai_bunkers , ai_oil_mine , ai_fact_extensions , ai_retreating_vehicles_defend ; export ai_near_base_dist , ai_going_to_attack_this_base , ai_refuel_vehicles_list , ai_vehicles_being_repaired ; export ai_vehicle_attack_delay , ai_bases , ai_has_switched_base_target , ai_cargo_bay , ai_cargo_bay_under_construction , ai_apemen_engineers ; export ai_attacking_soldiers , ai_attacking_scientists , ai_humans_ready_to_attack , ai_retreating_attacking_humans , ai_human_attack_delay ; export ai_vehicles_having_been_moved , ai_turrets , ai_captured_buildings ; export oswald_is_substitute , kurt_is_substitute , escape_cargo_bay , rus_num_building_rebuild , rus_num_vehicle_rebuild ; export traitors_leader_is_substitute , traitors_humans , traitors_vehicles , traitors_answer , scout_pullback ; export traitors_pullback , original_traitors_humans , gensher_answer , gensher_reinforcements , russians_surrender ; export max_player_attack_time , start_tick , quick_action , russian_prisoners , russian_prisoners_decision ; export handle_russian_prisoners_now , russian_prisoners_escaped , russians_attack , starting_humans , original_genshers_reinforcements ; export engineer_simulation , gossudarov_escape_status , disable_gossudarov_single_control , num_base_vehicles ; export escort_veh_front , escort_veh_rear , check_escape , artifact_cargo_bay_status , investigate_time_shifting ; export time_shift_hexes , time_shift_data , time_shift_bazookers , mines_hexes , activate_traitor_mines , time_shifting_used_in_first_attack ; export traitors_under_player_control , vehicle_captured_events ; 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 ] ;
  16: LD_ADDR_EXP 49
  20: PUSH
  21: LD_INT 1
  23: PUSH
  24: EMPTY
  25: LIST
  26: ST_TO_ADDR
// ai_soldiers = [ [ ] , [ ] ] ;
  27: LD_ADDR_EXP 17
  31: PUSH
  32: EMPTY
  33: PUSH
  34: EMPTY
  35: PUSH
  36: EMPTY
  37: LIST
  38: LIST
  39: ST_TO_ADDR
// ai_attacking_soldiers = [ [ ] , [ ] ] ;
  40: LD_ADDR_EXP 54
  44: PUSH
  45: EMPTY
  46: PUSH
  47: EMPTY
  48: PUSH
  49: EMPTY
  50: LIST
  51: LIST
  52: ST_TO_ADDR
// ai_engineers = [ [ ] , [ ] ] ;
  53: LD_ADDR_EXP 18
  57: PUSH
  58: EMPTY
  59: PUSH
  60: EMPTY
  61: PUSH
  62: EMPTY
  63: LIST
  64: LIST
  65: ST_TO_ADDR
// ai_mechanics_defend = [ [ ] , [ ] ] ;
  66: LD_ADDR_EXP 19
  70: PUSH
  71: EMPTY
  72: PUSH
  73: EMPTY
  74: PUSH
  75: EMPTY
  76: LIST
  77: LIST
  78: ST_TO_ADDR
// ai_mechanics_attack = [ [ ] , [ ] ] ;
  79: LD_ADDR_EXP 20
  83: PUSH
  84: EMPTY
  85: PUSH
  86: EMPTY
  87: PUSH
  88: EMPTY
  89: LIST
  90: LIST
  91: ST_TO_ADDR
// ai_scientists = [ [ ] , [ ] ] ;
  92: LD_ADDR_EXP 21
  96: PUSH
  97: EMPTY
  98: PUSH
  99: EMPTY
 100: PUSH
 101: EMPTY
 102: LIST
 103: LIST
 104: ST_TO_ADDR
// ai_attacking_scientists = [ [ ] , [ ] ] ;
 105: LD_ADDR_EXP 55
 109: PUSH
 110: EMPTY
 111: PUSH
 112: EMPTY
 113: PUSH
 114: EMPTY
 115: LIST
 116: LIST
 117: ST_TO_ADDR
// ai_apemen_engineers = [ [ ] , [ ] ] ;
 118: LD_ADDR_EXP 53
 122: PUSH
 123: EMPTY
 124: PUSH
 125: EMPTY
 126: PUSH
 127: EMPTY
 128: LIST
 129: LIST
 130: ST_TO_ADDR
// ai_depot = [ 0 , 0 ] ;
 131: LD_ADDR_EXP 23
 135: PUSH
 136: LD_INT 0
 138: PUSH
 139: LD_INT 0
 141: PUSH
 142: EMPTY
 143: LIST
 144: LIST
 145: ST_TO_ADDR
// ai_labs = [ [ ] , [ ] ] ;
 146: LD_ADDR_EXP 24
 150: PUSH
 151: EMPTY
 152: PUSH
 153: EMPTY
 154: PUSH
 155: EMPTY
 156: LIST
 157: LIST
 158: ST_TO_ADDR
// ai_facts = [ [ ] , [ ] ] ;
 159: LD_ADDR_EXP 38
 163: PUSH
 164: EMPTY
 165: PUSH
 166: EMPTY
 167: PUSH
 168: EMPTY
 169: LIST
 170: LIST
 171: ST_TO_ADDR
// ai_armouries = [ [ ] , [ ] ] ;
 172: LD_ADDR_EXP 39
 176: PUSH
 177: EMPTY
 178: PUSH
 179: EMPTY
 180: PUSH
 181: EMPTY
 182: LIST
 183: LIST
 184: ST_TO_ADDR
// ai_bunkers = [ [ ] , [ ] ] ;
 185: LD_ADDR_EXP 40
 189: PUSH
 190: EMPTY
 191: PUSH
 192: EMPTY
 193: PUSH
 194: EMPTY
 195: LIST
 196: LIST
 197: ST_TO_ADDR
// ai_turrets = [ [ ] , [ ] ] ;
 198: LD_ADDR_EXP 60
 202: PUSH
 203: EMPTY
 204: PUSH
 205: EMPTY
 206: PUSH
 207: EMPTY
 208: LIST
 209: LIST
 210: ST_TO_ADDR
// ai_oil_mine = [ 0 , 0 ] ;
 211: LD_ADDR_EXP 41
 215: PUSH
 216: LD_INT 0
 218: PUSH
 219: LD_INT 0
 221: PUSH
 222: EMPTY
 223: LIST
 224: LIST
 225: ST_TO_ADDR
// ai_siberite_mines = [ [ ] , [ ] ] ;
 226: LD_ADDR_EXP 25
 230: PUSH
 231: EMPTY
 232: PUSH
 233: EMPTY
 234: PUSH
 235: EMPTY
 236: LIST
 237: LIST
 238: ST_TO_ADDR
// ai_fact_extensions = [ [ ] , [ ] ] ;
 239: LD_ADDR_EXP 42
 243: PUSH
 244: EMPTY
 245: PUSH
 246: EMPTY
 247: PUSH
 248: EMPTY
 249: LIST
 250: LIST
 251: ST_TO_ADDR
// ai_power_plants = [ [ ] , [ ] ] ;
 252: LD_ADDR_EXP 26
 256: PUSH
 257: EMPTY
 258: PUSH
 259: EMPTY
 260: PUSH
 261: EMPTY
 262: LIST
 263: LIST
 264: ST_TO_ADDR
// ai_buildings_locations = [ [ ] , [ ] ] ;
 265: LD_ADDR_EXP 27
 269: PUSH
 270: EMPTY
 271: PUSH
 272: EMPTY
 273: PUSH
 274: EMPTY
 275: LIST
 276: LIST
 277: ST_TO_ADDR
// ai_captured_buildings = [ [ ] , [ ] ] ;
 278: LD_ADDR_EXP 61
 282: PUSH
 283: EMPTY
 284: PUSH
 285: EMPTY
 286: PUSH
 287: EMPTY
 288: LIST
 289: LIST
 290: ST_TO_ADDR
// ai_vehicles_defend = [ [ ] , [ ] ] ;
 291: LD_ADDR_EXP 28
 295: PUSH
 296: EMPTY
 297: PUSH
 298: EMPTY
 299: PUSH
 300: EMPTY
 301: LIST
 302: LIST
 303: ST_TO_ADDR
// ai_vehicles_attack = [ [ ] , [ ] ] ;
 304: LD_ADDR_EXP 29
 308: PUSH
 309: EMPTY
 310: PUSH
 311: EMPTY
 312: PUSH
 313: EMPTY
 314: LIST
 315: LIST
 316: ST_TO_ADDR
// ai_retreating_vehicles_defend = [ [ ] , [ ] ] ;
 317: LD_ADDR_EXP 43
 321: PUSH
 322: EMPTY
 323: PUSH
 324: EMPTY
 325: PUSH
 326: EMPTY
 327: LIST
 328: LIST
 329: ST_TO_ADDR
// ai_vehicles_being_repaired = [ [ ] , [ ] ] ;
 330: LD_ADDR_EXP 47
 334: PUSH
 335: EMPTY
 336: PUSH
 337: EMPTY
 338: PUSH
 339: EMPTY
 340: LIST
 341: LIST
 342: ST_TO_ADDR
// ai_refuel_vehicles_list = [ [ ] , [ ] ] ;
 343: LD_ADDR_EXP 46
 347: PUSH
 348: EMPTY
 349: PUSH
 350: EMPTY
 351: PUSH
 352: EMPTY
 353: LIST
 354: LIST
 355: ST_TO_ADDR
// ai_vehicle_pullback_hexes = [ [ [ 178 , 72 ] , [ 177 , 77 ] ] , [ ] , [ ] ] ;
 356: LD_ADDR_EXP 30
 360: PUSH
 361: LD_INT 178
 363: PUSH
 364: LD_INT 72
 366: PUSH
 367: EMPTY
 368: LIST
 369: LIST
 370: PUSH
 371: LD_INT 177
 373: PUSH
 374: LD_INT 77
 376: PUSH
 377: EMPTY
 378: LIST
 379: LIST
 380: PUSH
 381: EMPTY
 382: LIST
 383: LIST
 384: PUSH
 385: EMPTY
 386: PUSH
 387: EMPTY
 388: PUSH
 389: EMPTY
 390: LIST
 391: LIST
 392: LIST
 393: ST_TO_ADDR
// ai_human_pullback_hex = [ [ 182 , 76 ] , [ ] ] ;
 394: LD_ADDR_EXP 31
 398: PUSH
 399: LD_INT 182
 401: PUSH
 402: LD_INT 76
 404: PUSH
 405: EMPTY
 406: LIST
 407: LIST
 408: PUSH
 409: EMPTY
 410: PUSH
 411: EMPTY
 412: LIST
 413: LIST
 414: ST_TO_ADDR
// ai_building_under_construction = [ 0 , 0 ] ;
 415: LD_ADDR_EXP 32
 419: PUSH
 420: LD_INT 0
 422: PUSH
 423: LD_INT 0
 425: PUSH
 426: EMPTY
 427: LIST
 428: LIST
 429: ST_TO_ADDR
// ai_heal_these_humans = [ [ ] , [ ] ] ;
 430: LD_ADDR_EXP 33
 434: PUSH
 435: EMPTY
 436: PUSH
 437: EMPTY
 438: PUSH
 439: EMPTY
 440: LIST
 441: LIST
 442: ST_TO_ADDR
// ai_all_buildings = [ [ ] , [ ] ] ;
 443: LD_ADDR_EXP 34
 447: PUSH
 448: EMPTY
 449: PUSH
 450: EMPTY
 451: PUSH
 452: EMPTY
 453: LIST
 454: LIST
 455: ST_TO_ADDR
// ai_building_constructor = [ 0 , 0 ] ;
 456: LD_ADDR_EXP 35
 460: PUSH
 461: LD_INT 0
 463: PUSH
 464: LD_INT 0
 466: PUSH
 467: EMPTY
 468: LIST
 469: LIST
 470: ST_TO_ADDR
// ai_vehicle_being_moved = [ 0 , 0 , 0 ] ;
 471: LD_ADDR_EXP 36
 475: PUSH
 476: LD_INT 0
 478: PUSH
 479: LD_INT 0
 481: PUSH
 482: LD_INT 0
 484: PUSH
 485: EMPTY
 486: LIST
 487: LIST
 488: LIST
 489: ST_TO_ADDR
// ai_vehicles_having_been_moved = [ [ ] , [ ] ] ;
 490: LD_ADDR_EXP 59
 494: PUSH
 495: EMPTY
 496: PUSH
 497: EMPTY
 498: PUSH
 499: EMPTY
 500: LIST
 501: LIST
 502: ST_TO_ADDR
// ai_upcoming_building_data = [ [ ] , [ ] ] ;
 503: LD_ADDR_EXP 37
 507: PUSH
 508: EMPTY
 509: PUSH
 510: EMPTY
 511: PUSH
 512: EMPTY
 513: LIST
 514: LIST
 515: ST_TO_ADDR
// ai_near_base_dist = 18 ;
 516: LD_ADDR_EXP 44
 520: PUSH
 521: LD_INT 18
 523: ST_TO_ADDR
// ai_vehicle_attack_delay = [ 0 0$0 , 0 0$0 ] ;
 524: LD_ADDR_EXP 48
 528: PUSH
 529: LD_INT 0
 531: PUSH
 532: LD_INT 0
 534: PUSH
 535: EMPTY
 536: LIST
 537: LIST
 538: ST_TO_ADDR
// ai_human_attack_delay = [ 0 0$0 , 0 0$0 ] ;
 539: LD_ADDR_EXP 58
 543: PUSH
 544: LD_INT 0
 546: PUSH
 547: LD_INT 0
 549: PUSH
 550: EMPTY
 551: LIST
 552: LIST
 553: ST_TO_ADDR
// ai_cargo_bay = [ 0 , 0 ] ;
 554: LD_ADDR_EXP 51
 558: PUSH
 559: LD_INT 0
 561: PUSH
 562: LD_INT 0
 564: PUSH
 565: EMPTY
 566: LIST
 567: LIST
 568: ST_TO_ADDR
// ai_cargo_bay_under_construction = [ false , false ] ;
 569: LD_ADDR_EXP 52
 573: PUSH
 574: LD_INT 0
 576: PUSH
 577: LD_INT 0
 579: PUSH
 580: EMPTY
 581: LIST
 582: LIST
 583: ST_TO_ADDR
// ai_humans_ready_to_attack = [ false , false ] ;
 584: LD_ADDR_EXP 56
 588: PUSH
 589: LD_INT 0
 591: PUSH
 592: LD_INT 0
 594: PUSH
 595: EMPTY
 596: LIST
 597: LIST
 598: ST_TO_ADDR
// ai_retreating_attacking_humans = [ [ ] , [ ] ] ;
 599: LD_ADDR_EXP 57
 603: PUSH
 604: EMPTY
 605: PUSH
 606: EMPTY
 607: PUSH
 608: EMPTY
 609: LIST
 610: LIST
 611: ST_TO_ADDR
// oswald_is_substitute = false ;
 612: LD_ADDR_EXP 62
 616: PUSH
 617: LD_INT 0
 619: ST_TO_ADDR
// kurt_is_substitute = false ;
 620: LD_ADDR_EXP 63
 624: PUSH
 625: LD_INT 0
 627: ST_TO_ADDR
// traitors_leader_is_substitute = false ;
 628: LD_ADDR_EXP 67
 632: PUSH
 633: LD_INT 0
 635: ST_TO_ADDR
// escape_cargo_bay = 0 ;
 636: LD_ADDR_EXP 64
 640: PUSH
 641: LD_INT 0
 643: ST_TO_ADDR
// rus_num_building_rebuild = difficulty - 1 ;
 644: LD_ADDR_EXP 65
 648: PUSH
 649: LD_OWVAR 67
 653: PUSH
 654: LD_INT 1
 656: MINUS
 657: ST_TO_ADDR
// rus_num_vehicle_rebuild = difficulty + 1 ;
 658: LD_ADDR_EXP 66
 662: PUSH
 663: LD_OWVAR 67
 667: PUSH
 668: LD_INT 1
 670: PLUS
 671: ST_TO_ADDR
// traitors_humans = [ ] ;
 672: LD_ADDR_EXP 68
 676: PUSH
 677: EMPTY
 678: ST_TO_ADDR
// original_traitors_humans = [ ] ;
 679: LD_ADDR_EXP 73
 683: PUSH
 684: EMPTY
 685: ST_TO_ADDR
// traitors_vehicles = [ ] ;
 686: LD_ADDR_EXP 69
 690: PUSH
 691: EMPTY
 692: ST_TO_ADDR
// traitors_answer = 0 ;
 693: LD_ADDR_EXP 70
 697: PUSH
 698: LD_INT 0
 700: ST_TO_ADDR
// traitors_pullback = false ;
 701: LD_ADDR_EXP 72
 705: PUSH
 706: LD_INT 0
 708: ST_TO_ADDR
// scout_pullback = false ;
 709: LD_ADDR_EXP 71
 713: PUSH
 714: LD_INT 0
 716: ST_TO_ADDR
// gensher_answer = 0 ;
 717: LD_ADDR_EXP 74
 721: PUSH
 722: LD_INT 0
 724: ST_TO_ADDR
// gensher_reinforcements = false ;
 725: LD_ADDR_EXP 75
 729: PUSH
 730: LD_INT 0
 732: ST_TO_ADDR
// russians_surrender = false ;
 733: LD_ADDR_EXP 76
 737: PUSH
 738: LD_INT 0
 740: ST_TO_ADDR
// start_tick = tick ;
 741: LD_ADDR_EXP 78
 745: PUSH
 746: LD_OWVAR 1
 750: ST_TO_ADDR
// max_player_attack_time = [ 15 15$0 , 10 10$0 , 10 10$0 ] [ difficulty ] ;
 751: LD_ADDR_EXP 77
 755: PUSH
 756: LD_INT 31500
 758: PUSH
 759: LD_INT 21000
 761: PUSH
 762: LD_INT 21000
 764: PUSH
 765: EMPTY
 766: LIST
 767: LIST
 768: LIST
 769: PUSH
 770: LD_OWVAR 67
 774: ARRAY
 775: ST_TO_ADDR
// quick_action = false ;
 776: LD_ADDR_EXP 79
 780: PUSH
 781: LD_INT 0
 783: ST_TO_ADDR
// russian_prisoners = [ ] ;
 784: LD_ADDR_EXP 80
 788: PUSH
 789: EMPTY
 790: ST_TO_ADDR
// russian_prisoners_decision = 0 ;
 791: LD_ADDR_EXP 81
 795: PUSH
 796: LD_INT 0
 798: ST_TO_ADDR
// handle_russian_prisoners_now = false ;
 799: LD_ADDR_EXP 82
 803: PUSH
 804: LD_INT 0
 806: ST_TO_ADDR
// russian_prisoners_escaped = [ ] ;
 807: LD_ADDR_EXP 83
 811: PUSH
 812: EMPTY
 813: ST_TO_ADDR
// russians_attack = 0 ;
 814: LD_ADDR_EXP 84
 818: PUSH
 819: LD_INT 0
 821: ST_TO_ADDR
// starting_humans = [ ] ;
 822: LD_ADDR_EXP 85
 826: PUSH
 827: EMPTY
 828: ST_TO_ADDR
// original_genshers_reinforcements = [ ] ;
 829: LD_ADDR_EXP 86
 833: PUSH
 834: EMPTY
 835: ST_TO_ADDR
// engineer_simulation = false ;
 836: LD_ADDR_EXP 87
 840: PUSH
 841: LD_INT 0
 843: ST_TO_ADDR
// gossudarov_escape_status = 0 ;
 844: LD_ADDR_EXP 88
 848: PUSH
 849: LD_INT 0
 851: ST_TO_ADDR
// disable_gossudarov_single_control = false ;
 852: LD_ADDR_EXP 89
 856: PUSH
 857: LD_INT 0
 859: ST_TO_ADDR
// escort_veh_front = 0 ;
 860: LD_ADDR_EXP 91
 864: PUSH
 865: LD_INT 0
 867: ST_TO_ADDR
// escort_veh_rear = 0 ;
 868: LD_ADDR_EXP 92
 872: PUSH
 873: LD_INT 0
 875: ST_TO_ADDR
// num_base_vehicles = [ 0 , 1 , 2 ] [ difficulty ] ;
 876: LD_ADDR_EXP 90
 880: PUSH
 881: LD_INT 0
 883: PUSH
 884: LD_INT 1
 886: PUSH
 887: LD_INT 2
 889: PUSH
 890: EMPTY
 891: LIST
 892: LIST
 893: LIST
 894: PUSH
 895: LD_OWVAR 67
 899: ARRAY
 900: ST_TO_ADDR
// check_escape = false ;
 901: LD_ADDR_EXP 93
 905: PUSH
 906: LD_INT 0
 908: ST_TO_ADDR
// artifact_cargo_bay_status = 0 ;
 909: LD_ADDR_EXP 94
 913: PUSH
 914: LD_INT 0
 916: ST_TO_ADDR
// investigate_time_shifting = 0 ;
 917: LD_ADDR_EXP 95
 921: PUSH
 922: LD_INT 0
 924: ST_TO_ADDR
// traitors_under_player_control = false ;
 925: LD_ADDR_EXP 102
 929: PUSH
 930: LD_INT 0
 932: ST_TO_ADDR
// vehicle_captured_events = [ ] ;
 933: LD_ADDR_EXP 103
 937: PUSH
 938: EMPTY
 939: ST_TO_ADDR
// time_shift_data = [ ] ;
 940: LD_ADDR_EXP 97
 944: PUSH
 945: EMPTY
 946: ST_TO_ADDR
// InitiateTimeShiftData ;
 947: CALL 1017 0 0
// time_shift_hexes = [ ] ;
 951: LD_ADDR_EXP 96
 955: PUSH
 956: EMPTY
 957: ST_TO_ADDR
// time_shift_bazookers = [ ] ;
 958: LD_ADDR_EXP 98
 962: PUSH
 963: EMPTY
 964: ST_TO_ADDR
// mines_hexes = [ ] ;
 965: LD_ADDR_EXP 99
 969: PUSH
 970: EMPTY
 971: ST_TO_ADDR
// activate_traitor_mines = false ;
 972: LD_ADDR_EXP 100
 976: PUSH
 977: LD_INT 0
 979: ST_TO_ADDR
// time_shifting_used_in_first_attack = false ;
 980: LD_ADDR_EXP 101
 984: PUSH
 985: LD_INT 0
 987: ST_TO_ADDR
// PrepareSides ;
 988: CALL 1214 0 0
// PrepareNature ;
 992: CALL 1382 0 0
// PrepareArabians ;
 996: CALL 2065 0 0
// ScanBuildings ;
1000: CALL 4528 0 0
// PrepareComputerSides ;
1004: CALL 6582 0 0
// PrepareCrates ;
1008: CALL 42933 0 0
// Action ;
1012: CALL 8277 0 0
// end ;
1016: END
// function InitiateTimeShiftData ; var side ; begin
1017: LD_INT 0
1019: PPUSH
1020: PPUSH
// for side = 1 to 8 do
1021: LD_ADDR_VAR 0 2
1025: PUSH
1026: DOUBLE
1027: LD_INT 1
1029: DEC
1030: ST_TO_ADDR
1031: LD_INT 8
1033: PUSH
1034: FOR_TO
1035: IFFALSE 1207
// if Researched ( side , tech_st3 ) then
1037: LD_VAR 0 2
1041: PPUSH
1042: LD_INT 65
1044: PPUSH
1045: CALL_OW 325
1049: IFFALSE 1083
// time_shift_data = Replace ( time_shift_data , side , [ 420 , 10 ] ) else
1051: LD_ADDR_EXP 97
1055: PUSH
1056: LD_EXP 97
1060: PPUSH
1061: LD_VAR 0 2
1065: PPUSH
1066: LD_INT 420
1068: PUSH
1069: LD_INT 10
1071: PUSH
1072: EMPTY
1073: LIST
1074: LIST
1075: PPUSH
1076: CALL_OW 1
1080: ST_TO_ADDR
1081: GO 1205
// if Researched ( side , tech_st2 ) then
1083: LD_VAR 0 2
1087: PPUSH
1088: LD_INT 64
1090: PPUSH
1091: CALL_OW 325
1095: IFFALSE 1129
// time_shift_data = Replace ( time_shift_data , side , [ 420 , 10 ] ) else
1097: LD_ADDR_EXP 97
1101: PUSH
1102: LD_EXP 97
1106: PPUSH
1107: LD_VAR 0 2
1111: PPUSH
1112: LD_INT 420
1114: PUSH
1115: LD_INT 10
1117: PUSH
1118: EMPTY
1119: LIST
1120: LIST
1121: PPUSH
1122: CALL_OW 1
1126: ST_TO_ADDR
1127: GO 1205
// if Researched ( side , tech_st1 ) then
1129: LD_VAR 0 2
1133: PPUSH
1134: LD_INT 63
1136: PPUSH
1137: CALL_OW 325
1141: IFFALSE 1175
// time_shift_data = Replace ( time_shift_data , side , [ 320 , 7 ] ) else
1143: LD_ADDR_EXP 97
1147: PUSH
1148: LD_EXP 97
1152: PPUSH
1153: LD_VAR 0 2
1157: PPUSH
1158: LD_INT 320
1160: PUSH
1161: LD_INT 7
1163: PUSH
1164: EMPTY
1165: LIST
1166: LIST
1167: PPUSH
1168: CALL_OW 1
1172: ST_TO_ADDR
1173: GO 1205
// time_shift_data = Replace ( time_shift_data , side , [ 215 , 4 ] ) ;
1175: LD_ADDR_EXP 97
1179: PUSH
1180: LD_EXP 97
1184: PPUSH
1185: LD_VAR 0 2
1189: PPUSH
1190: LD_INT 215
1192: PUSH
1193: LD_INT 4
1195: PUSH
1196: EMPTY
1197: LIST
1198: LIST
1199: PPUSH
1200: CALL_OW 1
1204: ST_TO_ADDR
1205: GO 1034
1207: POP
1208: POP
// end ;
1209: LD_VAR 0 1
1213: RET
// function PrepareSides ; begin
1214: LD_INT 0
1216: PPUSH
// nature = 0 ;
1217: LD_ADDR_EXP 4
1221: PUSH
1222: LD_INT 0
1224: ST_TO_ADDR
// you = 2 ;
1225: LD_ADDR_EXP 2
1229: PUSH
1230: LD_INT 2
1232: ST_TO_ADDR
// russians = 3 ;
1233: LD_ADDR_EXP 3
1237: PUSH
1238: LD_INT 3
1240: ST_TO_ADDR
// you_alt = 5 ;
1241: LD_ADDR_EXP 5
1245: PUSH
1246: LD_INT 5
1248: ST_TO_ADDR
// russians_alt = 6 ;
1249: LD_ADDR_EXP 6
1253: PUSH
1254: LD_INT 6
1256: ST_TO_ADDR
// SetAttitude ( you , russians , att_enemy , true ) ;
1257: LD_EXP 2
1261: PPUSH
1262: LD_EXP 3
1266: PPUSH
1267: LD_INT 2
1269: PPUSH
1270: LD_INT 1
1272: PPUSH
1273: CALL_OW 80
// SetAttitude ( you , you_alt , att_neutral , true ) ;
1277: LD_EXP 2
1281: PPUSH
1282: LD_EXP 5
1286: PPUSH
1287: LD_INT 0
1289: PPUSH
1290: LD_INT 1
1292: PPUSH
1293: CALL_OW 80
// SetAttitude ( you , russians_alt , att_friend , true ) ;
1297: LD_EXP 2
1301: PPUSH
1302: LD_EXP 6
1306: PPUSH
1307: LD_INT 1
1309: PPUSH
1310: LD_INT 1
1312: PPUSH
1313: CALL_OW 80
// SetAttitude ( russians , you_alt , att_enemy , true ) ;
1317: LD_EXP 3
1321: PPUSH
1322: LD_EXP 5
1326: PPUSH
1327: LD_INT 2
1329: PPUSH
1330: LD_INT 1
1332: PPUSH
1333: CALL_OW 80
// SetAttitude ( russians , russians_alt , att_friend , true ) ;
1337: LD_EXP 3
1341: PPUSH
1342: LD_EXP 6
1346: PPUSH
1347: LD_INT 1
1349: PPUSH
1350: LD_INT 1
1352: PPUSH
1353: CALL_OW 80
// SetAttitude ( you_alt , russians_alt , att_friend , true ) ;
1357: LD_EXP 5
1361: PPUSH
1362: LD_EXP 6
1366: PPUSH
1367: LD_INT 1
1369: PPUSH
1370: LD_INT 1
1372: PPUSH
1373: CALL_OW 80
// end ;
1377: LD_VAR 0 1
1381: RET
// function PrepareNature ; var i , spots , num , agres , count , temp_unit ; begin
1382: LD_INT 0
1384: PPUSH
1385: PPUSH
1386: PPUSH
1387: PPUSH
1388: PPUSH
1389: PPUSH
1390: PPUSH
// spots = [ [ 17 , 6 ] , [ 54 , 85 ] , [ 74 , 74 ] , [ 134 , 13 ] , [ 147 , 9 ] , [ 164 , 18 ] , [ 138 , 30 ] , [ 148 , 40 ] , [ 99 , 91 ] ] ;
1391: LD_ADDR_VAR 0 3
1395: PUSH
1396: LD_INT 17
1398: PUSH
1399: LD_INT 6
1401: PUSH
1402: EMPTY
1403: LIST
1404: LIST
1405: PUSH
1406: LD_INT 54
1408: PUSH
1409: LD_INT 85
1411: PUSH
1412: EMPTY
1413: LIST
1414: LIST
1415: PUSH
1416: LD_INT 74
1418: PUSH
1419: LD_INT 74
1421: PUSH
1422: EMPTY
1423: LIST
1424: LIST
1425: PUSH
1426: LD_INT 134
1428: PUSH
1429: LD_INT 13
1431: PUSH
1432: EMPTY
1433: LIST
1434: LIST
1435: PUSH
1436: LD_INT 147
1438: PUSH
1439: LD_INT 9
1441: PUSH
1442: EMPTY
1443: LIST
1444: LIST
1445: PUSH
1446: LD_INT 164
1448: PUSH
1449: LD_INT 18
1451: PUSH
1452: EMPTY
1453: LIST
1454: LIST
1455: PUSH
1456: LD_INT 138
1458: PUSH
1459: LD_INT 30
1461: PUSH
1462: EMPTY
1463: LIST
1464: LIST
1465: PUSH
1466: LD_INT 148
1468: PUSH
1469: LD_INT 40
1471: PUSH
1472: EMPTY
1473: LIST
1474: LIST
1475: PUSH
1476: LD_INT 99
1478: PUSH
1479: LD_INT 91
1481: PUSH
1482: EMPTY
1483: LIST
1484: LIST
1485: PUSH
1486: EMPTY
1487: LIST
1488: LIST
1489: LIST
1490: LIST
1491: LIST
1492: LIST
1493: LIST
1494: LIST
1495: LIST
1496: ST_TO_ADDR
// InitUc ;
1497: CALL_OW 18
// InitHc ;
1501: CALL_OW 19
// uc_side = nature ;
1505: LD_ADDR_OWVAR 20
1509: PUSH
1510: LD_EXP 4
1514: ST_TO_ADDR
// uc_nation = nation_nature ;
1515: LD_ADDR_OWVAR 21
1519: PUSH
1520: LD_INT 0
1522: ST_TO_ADDR
// agres = - 10 + difficulty * 20 ;
1523: LD_ADDR_VAR 0 5
1527: PUSH
1528: LD_INT 10
1530: NEG
1531: PUSH
1532: LD_OWVAR 67
1536: PUSH
1537: LD_INT 20
1539: MUL
1540: PLUS
1541: ST_TO_ADDR
// count = [ 5 , 3 , 2 ] [ difficulty ] ;
1542: LD_ADDR_VAR 0 6
1546: PUSH
1547: LD_INT 5
1549: PUSH
1550: LD_INT 3
1552: PUSH
1553: LD_INT 2
1555: PUSH
1556: EMPTY
1557: LIST
1558: LIST
1559: LIST
1560: PUSH
1561: LD_OWVAR 67
1565: ARRAY
1566: ST_TO_ADDR
// hc_class = class_apeman ;
1567: LD_ADDR_OWVAR 28
1571: PUSH
1572: LD_INT 12
1574: ST_TO_ADDR
// for i = 1 to count do
1575: LD_ADDR_VAR 0 2
1579: PUSH
1580: DOUBLE
1581: LD_INT 1
1583: DEC
1584: ST_TO_ADDR
1585: LD_VAR 0 6
1589: PUSH
1590: FOR_TO
1591: IFFALSE 1819
// begin if spots = 0 then
1593: LD_VAR 0 3
1597: PUSH
1598: LD_INT 0
1600: EQUAL
1601: IFFALSE 1607
// exit ;
1603: POP
1604: POP
1605: GO 2060
// uc_direction = Rand ( 0 , 5 ) ;
1607: LD_ADDR_OWVAR 24
1611: PUSH
1612: LD_INT 0
1614: PPUSH
1615: LD_INT 5
1617: PPUSH
1618: CALL_OW 12
1622: ST_TO_ADDR
// hc_agressivity = Rand ( - 1 * agres , agres ) ;
1623: LD_ADDR_OWVAR 35
1627: PUSH
1628: LD_INT 1
1630: NEG
1631: PUSH
1632: LD_VAR 0 5
1636: MUL
1637: PPUSH
1638: LD_VAR 0 5
1642: PPUSH
1643: CALL_OW 12
1647: ST_TO_ADDR
// hc_attr = [ Rand ( 11 , 13 ) , Rand ( 10 , 11 ) ] ;
1648: LD_ADDR_OWVAR 29
1652: PUSH
1653: LD_INT 11
1655: PPUSH
1656: LD_INT 13
1658: PPUSH
1659: CALL_OW 12
1663: PUSH
1664: LD_INT 10
1666: PPUSH
1667: LD_INT 11
1669: PPUSH
1670: CALL_OW 12
1674: PUSH
1675: EMPTY
1676: LIST
1677: LIST
1678: ST_TO_ADDR
// hc_sex = Rand ( sex_male , sex_female ) ;
1679: LD_ADDR_OWVAR 27
1683: PUSH
1684: LD_INT 1
1686: PPUSH
1687: LD_INT 2
1689: PPUSH
1690: CALL_OW 12
1694: ST_TO_ADDR
// hc_skills = [ Rand ( 0 , 1 ) , Rand ( 0 , 1 ) , 0 , 0 ] ;
1695: LD_ADDR_OWVAR 31
1699: PUSH
1700: LD_INT 0
1702: PPUSH
1703: LD_INT 1
1705: PPUSH
1706: CALL_OW 12
1710: PUSH
1711: LD_INT 0
1713: PPUSH
1714: LD_INT 1
1716: PPUSH
1717: CALL_OW 12
1721: PUSH
1722: LD_INT 0
1724: PUSH
1725: LD_INT 0
1727: PUSH
1728: EMPTY
1729: LIST
1730: LIST
1731: LIST
1732: LIST
1733: ST_TO_ADDR
// num = Rand ( 1 , spots ) ;
1734: LD_ADDR_VAR 0 4
1738: PUSH
1739: LD_INT 1
1741: PPUSH
1742: LD_VAR 0 3
1746: PPUSH
1747: CALL_OW 12
1751: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , spots [ num ] [ 1 ] , spots [ num ] [ 2 ] , 5 , false ) ;
1752: CALL_OW 44
1756: PPUSH
1757: LD_VAR 0 3
1761: PUSH
1762: LD_VAR 0 4
1766: ARRAY
1767: PUSH
1768: LD_INT 1
1770: ARRAY
1771: PPUSH
1772: LD_VAR 0 3
1776: PUSH
1777: LD_VAR 0 4
1781: ARRAY
1782: PUSH
1783: LD_INT 2
1785: ARRAY
1786: PPUSH
1787: LD_INT 5
1789: PPUSH
1790: LD_INT 0
1792: PPUSH
1793: CALL_OW 50
// spots = Delete ( spots , num ) ;
1797: LD_ADDR_VAR 0 3
1801: PUSH
1802: LD_VAR 0 3
1806: PPUSH
1807: LD_VAR 0 4
1811: PPUSH
1812: CALL_OW 3
1816: ST_TO_ADDR
// end ;
1817: GO 1590
1819: POP
1820: POP
// for i in FilterAllUnits ( [ f_class , class_fish ] ) do
1821: LD_ADDR_VAR 0 2
1825: PUSH
1826: LD_INT 25
1828: PUSH
1829: LD_INT 20
1831: PUSH
1832: EMPTY
1833: LIST
1834: LIST
1835: PPUSH
1836: CALL_OW 69
1840: PUSH
1841: FOR_IN
1842: IFFALSE 1855
// DestroyUnit ( i ) ;
1844: LD_VAR 0 2
1848: PPUSH
1849: CALL_OW 65
1853: GO 1841
1855: POP
1856: POP
// hc_face_number = 2 ;
1857: LD_ADDR_OWVAR 34
1861: PUSH
1862: LD_INT 2
1864: ST_TO_ADDR
// hc_gallery = nature_foreg ;
1865: LD_ADDR_OWVAR 33
1869: PUSH
1870: LD_STRING nature_foreg
1872: ST_TO_ADDR
// hc_skills = [ 0 , 0 , 0 , 0 ] ;
1873: LD_ADDR_OWVAR 31
1877: PUSH
1878: LD_INT 0
1880: PUSH
1881: LD_INT 0
1883: PUSH
1884: LD_INT 0
1886: PUSH
1887: LD_INT 0
1889: PUSH
1890: EMPTY
1891: LIST
1892: LIST
1893: LIST
1894: LIST
1895: ST_TO_ADDR
// for i = 1 to 4 do
1896: LD_ADDR_VAR 0 2
1900: PUSH
1901: DOUBLE
1902: LD_INT 1
1904: DEC
1905: ST_TO_ADDR
1906: LD_INT 4
1908: PUSH
1909: FOR_TO
1910: IFFALSE 2058
// begin temp_unit = CreateHuman ;
1912: LD_ADDR_VAR 0 7
1916: PUSH
1917: CALL_OW 44
1921: ST_TO_ADDR
// SetClass ( temp_unit , class_fish ) ;
1922: LD_VAR 0 7
1926: PPUSH
1927: LD_INT 20
1929: PPUSH
1930: CALL_OW 336
// case i of 1 :
1934: LD_VAR 0 2
1938: PUSH
1939: LD_INT 1
1941: DOUBLE
1942: EQUAL
1943: IFTRUE 1947
1945: GO 1968
1947: POP
// PlaceUnitXY ( temp_unit , 131 , 82 , false ) ; 2 :
1948: LD_VAR 0 7
1952: PPUSH
1953: LD_INT 131
1955: PPUSH
1956: LD_INT 82
1958: PPUSH
1959: LD_INT 0
1961: PPUSH
1962: CALL_OW 48
1966: GO 2056
1968: LD_INT 2
1970: DOUBLE
1971: EQUAL
1972: IFTRUE 1976
1974: GO 1997
1976: POP
// PlaceUnitXY ( temp_unit , 121 , 55 , false ) ; 3 :
1977: LD_VAR 0 7
1981: PPUSH
1982: LD_INT 121
1984: PPUSH
1985: LD_INT 55
1987: PPUSH
1988: LD_INT 0
1990: PPUSH
1991: CALL_OW 48
1995: GO 2056
1997: LD_INT 3
1999: DOUBLE
2000: EQUAL
2001: IFTRUE 2005
2003: GO 2026
2005: POP
// PlaceUnitXY ( temp_unit , 116 , 20 , false ) ; 4 :
2006: LD_VAR 0 7
2010: PPUSH
2011: LD_INT 116
2013: PPUSH
2014: LD_INT 20
2016: PPUSH
2017: LD_INT 0
2019: PPUSH
2020: CALL_OW 48
2024: GO 2056
2026: LD_INT 4
2028: DOUBLE
2029: EQUAL
2030: IFTRUE 2034
2032: GO 2055
2034: POP
// PlaceUnitXY ( temp_unit , 117 , 10 , false ) ; end ;
2035: LD_VAR 0 7
2039: PPUSH
2040: LD_INT 117
2042: PPUSH
2043: LD_INT 10
2045: PPUSH
2046: LD_INT 0
2048: PPUSH
2049: CALL_OW 48
2053: GO 2056
2055: POP
// end ;
2056: GO 1909
2058: POP
2059: POP
// end ;
2060: LD_VAR 0 1
2064: RET
// function PrepareArabians ; var i , num_traitors , num , player_vehicles , temp_list ; begin
2065: LD_INT 0
2067: PPUSH
2068: PPUSH
2069: PPUSH
2070: PPUSH
2071: PPUSH
2072: PPUSH
// InitHc ;
2073: CALL_OW 19
// InitUc ;
2077: CALL_OW 18
// uc_side = you ;
2081: LD_ADDR_OWVAR 20
2085: PUSH
2086: LD_EXP 2
2090: ST_TO_ADDR
// uc_nation = nation_arabian ;
2091: LD_ADDR_OWVAR 21
2095: PUSH
2096: LD_INT 2
2098: ST_TO_ADDR
// if not testing then
2099: LD_EXP 1
2103: NOT
2104: IFFALSE 2381
// begin Heike = CreateCharacter ( Heike_09 ) ;
2106: LD_ADDR_EXP 7
2110: PUSH
2111: LD_STRING Heike_09
2113: PPUSH
2114: CALL_OW 34
2118: ST_TO_ADDR
// SetLives ( Heike , LoadVariable ( Heike_HP_09 , 1000 ) ) ;
2119: LD_EXP 7
2123: PPUSH
2124: LD_STRING Heike_HP_09
2126: PPUSH
2127: LD_INT 1000
2129: PPUSH
2130: CALL_OW 30
2134: PPUSH
2135: CALL_OW 234
// if TestCharacters ( Dwayne_09 ) then
2139: LD_STRING Dwayne_09
2141: PPUSH
2142: CALL_OW 28
2146: IFFALSE 2183
// begin Dwayne = CreateCharacter ( Dwayne_09 ) ;
2148: LD_ADDR_EXP 8
2152: PUSH
2153: LD_STRING Dwayne_09
2155: PPUSH
2156: CALL_OW 34
2160: ST_TO_ADDR
// SetLives ( Dwayne , LoadVariable ( Dwayne_HP_09 , 1000 ) ) ;
2161: LD_EXP 8
2165: PPUSH
2166: LD_STRING Dwayne_HP_09
2168: PPUSH
2169: LD_INT 1000
2171: PPUSH
2172: CALL_OW 30
2176: PPUSH
2177: CALL_OW 234
// end else
2181: GO 2191
// Dwayne = 0 ;
2183: LD_ADDR_EXP 8
2187: PUSH
2188: LD_INT 0
2190: ST_TO_ADDR
// if TestCharacters ( Oswald_09 ) then
2191: LD_STRING Oswald_09
2193: PPUSH
2194: CALL_OW 28
2198: IFFALSE 2251
// begin Oswald = CreateCharacter ( Oswald_09 ) ;
2200: LD_ADDR_EXP 9
2204: PUSH
2205: LD_STRING Oswald_09
2207: PPUSH
2208: CALL_OW 34
2212: ST_TO_ADDR
// SetLives ( Oswald , LoadVariable ( Oswald_HP_09 , 1000 ) ) ;
2213: LD_EXP 9
2217: PPUSH
2218: LD_STRING Oswald_HP_09
2220: PPUSH
2221: LD_INT 1000
2223: PPUSH
2224: CALL_OW 30
2228: PPUSH
2229: CALL_OW 234
// oswald_is_substitute = LoadVariable ( Oswald_is_substitute_09 , false ) ;
2233: LD_ADDR_EXP 62
2237: PUSH
2238: LD_STRING Oswald_is_substitute_09
2240: PPUSH
2241: LD_INT 0
2243: PPUSH
2244: CALL_OW 30
2248: ST_TO_ADDR
// end else
2249: GO 2259
// Oswald = 0 ;
2251: LD_ADDR_EXP 9
2255: PUSH
2256: LD_INT 0
2258: ST_TO_ADDR
// if TestCharacters ( Kurt_09 ) then
2259: LD_STRING Kurt_09
2261: PPUSH
2262: CALL_OW 28
2266: IFFALSE 2319
// begin Kurt = CreateCharacter ( Kurt_09 ) ;
2268: LD_ADDR_EXP 10
2272: PUSH
2273: LD_STRING Kurt_09
2275: PPUSH
2276: CALL_OW 34
2280: ST_TO_ADDR
// SetLives ( Kurt , LoadVariable ( Kurt_HP_09 , 1000 ) ) ;
2281: LD_EXP 10
2285: PPUSH
2286: LD_STRING Kurt_HP_09
2288: PPUSH
2289: LD_INT 1000
2291: PPUSH
2292: CALL_OW 30
2296: PPUSH
2297: CALL_OW 234
// kurt_is_substitute = LoadVariable ( Kurt_is_substitute_09 , false ) ;
2301: LD_ADDR_EXP 63
2305: PUSH
2306: LD_STRING Kurt_is_substitute_09
2308: PPUSH
2309: LD_INT 0
2311: PPUSH
2312: CALL_OW 30
2316: ST_TO_ADDR
// end else
2317: GO 2327
// Kurt = 0 ;
2319: LD_ADDR_EXP 10
2323: PUSH
2324: LD_INT 0
2326: ST_TO_ADDR
// if TestCharacters ( Gonzo_09 ) then
2327: LD_STRING Gonzo_09
2329: PPUSH
2330: CALL_OW 28
2334: IFFALSE 2371
// begin Gonzo = CreateCharacter ( Gonzo_09 ) ;
2336: LD_ADDR_EXP 11
2340: PUSH
2341: LD_STRING Gonzo_09
2343: PPUSH
2344: CALL_OW 34
2348: ST_TO_ADDR
// SetLives ( Gonzo , LoadVariable ( Gonzo_HP_09 , 1000 ) ) ;
2349: LD_EXP 11
2353: PPUSH
2354: LD_STRING Gonzo_HP_09
2356: PPUSH
2357: LD_INT 1000
2359: PPUSH
2360: CALL_OW 30
2364: PPUSH
2365: CALL_OW 234
// end else
2369: GO 2379
// Gonzo = 0 ;
2371: LD_ADDR_EXP 11
2375: PUSH
2376: LD_INT 0
2378: ST_TO_ADDR
// end else
2379: GO 2608
// begin InitHc ;
2381: CALL_OW 19
// PrepareSoldier ( sex_female , 7 ) ;
2385: LD_INT 2
2387: PPUSH
2388: LD_INT 7
2390: PPUSH
2391: CALL_OW 381
// hc_name = Heike ;
2395: LD_ADDR_OWVAR 26
2399: PUSH
2400: LD_STRING Heike
2402: ST_TO_ADDR
// Heike = CreateHuman ;
2403: LD_ADDR_EXP 7
2407: PUSH
2408: CALL_OW 44
2412: ST_TO_ADDR
// PrepareSoldier ( sex_male , 6 ) ;
2413: LD_INT 1
2415: PPUSH
2416: LD_INT 6
2418: PPUSH
2419: CALL_OW 381
// hc_name = Oswald ;
2423: LD_ADDR_OWVAR 26
2427: PUSH
2428: LD_STRING Oswald
2430: ST_TO_ADDR
// Oswald = CreateHuman ;
2431: LD_ADDR_EXP 9
2435: PUSH
2436: CALL_OW 44
2440: ST_TO_ADDR
// PrepareSoldier ( sex_male , 6 ) ;
2441: LD_INT 1
2443: PPUSH
2444: LD_INT 6
2446: PPUSH
2447: CALL_OW 381
// hc_name = Kurt ;
2451: LD_ADDR_OWVAR 26
2455: PUSH
2456: LD_STRING Kurt
2458: ST_TO_ADDR
// Kurt = CreateHuman ;
2459: LD_ADDR_EXP 10
2463: PUSH
2464: CALL_OW 44
2468: ST_TO_ADDR
// PrepareMechanic ( sex_male , 6 ) ;
2469: LD_INT 1
2471: PPUSH
2472: LD_INT 6
2474: PPUSH
2475: CALL_OW 383
// hc_name = Dwayne ;
2479: LD_ADDR_OWVAR 26
2483: PUSH
2484: LD_STRING Dwayne
2486: ST_TO_ADDR
// Dwayne = CreateHuman ;
2487: LD_ADDR_EXP 8
2491: PUSH
2492: CALL_OW 44
2496: ST_TO_ADDR
// uc_nation = nation_nature ;
2497: LD_ADDR_OWVAR 21
2501: PUSH
2502: LD_INT 0
2504: ST_TO_ADDR
// hc_name = Gonzo ;
2505: LD_ADDR_OWVAR 26
2509: PUSH
2510: LD_STRING Gonzo
2512: ST_TO_ADDR
// hc_class = class_apeman_soldier ;
2513: LD_ADDR_OWVAR 28
2517: PUSH
2518: LD_INT 15
2520: ST_TO_ADDR
// hc_sex = sex_male ;
2521: LD_ADDR_OWVAR 27
2525: PUSH
2526: LD_INT 1
2528: ST_TO_ADDR
// hc_attr = [ 13 , 12 ] ;
2529: LD_ADDR_OWVAR 29
2533: PUSH
2534: LD_INT 13
2536: PUSH
2537: LD_INT 12
2539: PUSH
2540: EMPTY
2541: LIST
2542: LIST
2543: ST_TO_ADDR
// hc_basic_skills = [ 0 , 0 , 0 , 0 ] ;
2544: LD_ADDR_OWVAR 30
2548: PUSH
2549: LD_INT 0
2551: PUSH
2552: LD_INT 0
2554: PUSH
2555: LD_INT 0
2557: PUSH
2558: LD_INT 0
2560: PUSH
2561: EMPTY
2562: LIST
2563: LIST
2564: LIST
2565: LIST
2566: ST_TO_ADDR
// hc_skills = [ 2 , 0 , 0 , 0 ] ;
2567: LD_ADDR_OWVAR 31
2571: PUSH
2572: LD_INT 2
2574: PUSH
2575: LD_INT 0
2577: PUSH
2578: LD_INT 0
2580: PUSH
2581: LD_INT 0
2583: PUSH
2584: EMPTY
2585: LIST
2586: LIST
2587: LIST
2588: LIST
2589: ST_TO_ADDR
// Gonzo = CreateHuman ;
2590: LD_ADDR_EXP 11
2594: PUSH
2595: CALL_OW 44
2599: ST_TO_ADDR
// hc_name =  ;
2600: LD_ADDR_OWVAR 26
2604: PUSH
2605: LD_STRING 
2607: ST_TO_ADDR
// end ; starting_humans = [ Heike , Oswald , Kurt , Dwayne ] diff 0 ;
2608: LD_ADDR_EXP 85
2612: PUSH
2613: LD_EXP 7
2617: PUSH
2618: LD_EXP 9
2622: PUSH
2623: LD_EXP 10
2627: PUSH
2628: LD_EXP 8
2632: PUSH
2633: EMPTY
2634: LIST
2635: LIST
2636: LIST
2637: LIST
2638: PUSH
2639: LD_INT 0
2641: DIFF
2642: ST_TO_ADDR
// player_vehicles = [ ] ;
2643: LD_ADDR_VAR 0 5
2647: PUSH
2648: EMPTY
2649: ST_TO_ADDR
// if testing then
2650: LD_EXP 1
2654: IFFALSE 2727
// temp_list = [ [ ru_medium_wheeled , control_manual , engine_siberite , ru_cargo_bay , nation_russian , 0 , 450 ] , [ ru_medium_tracked , control_manual , engine_combustion , ru_gatling_gun , nation_russian , 42 , 700 ] ] else
2656: LD_ADDR_VAR 0 6
2660: PUSH
2661: LD_INT 21
2663: PUSH
2664: LD_INT 1
2666: PUSH
2667: LD_INT 3
2669: PUSH
2670: LD_INT 51
2672: PUSH
2673: LD_INT 3
2675: PUSH
2676: LD_INT 0
2678: PUSH
2679: LD_INT 450
2681: PUSH
2682: EMPTY
2683: LIST
2684: LIST
2685: LIST
2686: LIST
2687: LIST
2688: LIST
2689: LIST
2690: PUSH
2691: LD_INT 22
2693: PUSH
2694: LD_INT 1
2696: PUSH
2697: LD_INT 1
2699: PUSH
2700: LD_INT 43
2702: PUSH
2703: LD_INT 3
2705: PUSH
2706: LD_INT 42
2708: PUSH
2709: LD_INT 700
2711: PUSH
2712: EMPTY
2713: LIST
2714: LIST
2715: LIST
2716: LIST
2717: LIST
2718: LIST
2719: LIST
2720: PUSH
2721: EMPTY
2722: LIST
2723: LIST
2724: ST_TO_ADDR
2725: GO 2734
// temp_list = [ ] ;
2727: LD_ADDR_VAR 0 6
2731: PUSH
2732: EMPTY
2733: ST_TO_ADDR
// InitVc ;
2734: CALL_OW 20
// for i in LoadVariable ( Vehicles_09 , temp_list ) do
2738: LD_ADDR_VAR 0 2
2742: PUSH
2743: LD_STRING Vehicles_09
2745: PPUSH
2746: LD_VAR 0 6
2750: PPUSH
2751: CALL_OW 30
2755: PUSH
2756: FOR_IN
2757: IFFALSE 2905
// begin if i [ 7 ] <= 250 then
2759: LD_VAR 0 2
2763: PUSH
2764: LD_INT 7
2766: ARRAY
2767: PUSH
2768: LD_INT 250
2770: LESSEQUAL
2771: IFFALSE 2775
// continue ;
2773: GO 2756
// uc_nation = i [ 5 ] ;
2775: LD_ADDR_OWVAR 21
2779: PUSH
2780: LD_VAR 0 2
2784: PUSH
2785: LD_INT 5
2787: ARRAY
2788: ST_TO_ADDR
// vc_chassis = i [ 1 ] ;
2789: LD_ADDR_OWVAR 37
2793: PUSH
2794: LD_VAR 0 2
2798: PUSH
2799: LD_INT 1
2801: ARRAY
2802: ST_TO_ADDR
// vc_control = i [ 2 ] ;
2803: LD_ADDR_OWVAR 38
2807: PUSH
2808: LD_VAR 0 2
2812: PUSH
2813: LD_INT 2
2815: ARRAY
2816: ST_TO_ADDR
// vc_engine = i [ 3 ] ;
2817: LD_ADDR_OWVAR 39
2821: PUSH
2822: LD_VAR 0 2
2826: PUSH
2827: LD_INT 3
2829: ARRAY
2830: ST_TO_ADDR
// vc_weapon = i [ 4 ] ;
2831: LD_ADDR_OWVAR 40
2835: PUSH
2836: LD_VAR 0 2
2840: PUSH
2841: LD_INT 4
2843: ARRAY
2844: ST_TO_ADDR
// vc_fuel_battery = i [ 6 ] ;
2845: LD_ADDR_OWVAR 41
2849: PUSH
2850: LD_VAR 0 2
2854: PUSH
2855: LD_INT 6
2857: ARRAY
2858: ST_TO_ADDR
// num = CreateVehicle ;
2859: LD_ADDR_VAR 0 4
2863: PUSH
2864: CALL_OW 45
2868: ST_TO_ADDR
// SetLives ( num , i [ 7 ] ) ;
2869: LD_VAR 0 4
2873: PPUSH
2874: LD_VAR 0 2
2878: PUSH
2879: LD_INT 7
2881: ARRAY
2882: PPUSH
2883: CALL_OW 234
// player_vehicles = player_vehicles ^ num ;
2887: LD_ADDR_VAR 0 5
2891: PUSH
2892: LD_VAR 0 5
2896: PUSH
2897: LD_VAR 0 4
2901: ADD
2902: ST_TO_ADDR
// end ;
2903: GO 2756
2905: POP
2906: POP
// for i in player_vehicles do
2907: LD_ADDR_VAR 0 2
2911: PUSH
2912: LD_VAR 0 5
2916: PUSH
2917: FOR_IN
2918: IFFALSE 3057
// begin temp_list = UnitFilter ( starting_humans , [ f_not , [ f_driving ] ] ) ;
2920: LD_ADDR_VAR 0 6
2924: PUSH
2925: LD_EXP 85
2929: PPUSH
2930: LD_INT 3
2932: PUSH
2933: LD_INT 55
2935: PUSH
2936: EMPTY
2937: LIST
2938: PUSH
2939: EMPTY
2940: LIST
2941: LIST
2942: PPUSH
2943: CALL_OW 72
2947: ST_TO_ADDR
// if temp_list = 0 then
2948: LD_VAR 0 6
2952: PUSH
2953: LD_INT 0
2955: EQUAL
2956: IFFALSE 2962
// exit ;
2958: POP
2959: POP
2960: GO 4359
// num = temp_list [ Rand ( 1 , temp_list + 0 ) ] ;
2962: LD_ADDR_VAR 0 4
2966: PUSH
2967: LD_VAR 0 6
2971: PUSH
2972: LD_INT 1
2974: PPUSH
2975: LD_VAR 0 6
2979: PUSH
2980: LD_INT 0
2982: PLUS
2983: PPUSH
2984: CALL_OW 12
2988: ARRAY
2989: ST_TO_ADDR
// PlaceHumanInUnit ( num , i ) ;
2990: LD_VAR 0 4
2994: PPUSH
2995: LD_VAR 0 2
2999: PPUSH
3000: CALL_OW 52
// SetDir ( i , 1 ) ;
3004: LD_VAR 0 2
3008: PPUSH
3009: LD_INT 1
3011: PPUSH
3012: CALL_OW 233
// if not PlaceUnitArea ( i , enter_area , false ) then
3016: LD_VAR 0 2
3020: PPUSH
3021: LD_INT 18
3023: PPUSH
3024: LD_INT 0
3026: PPUSH
3027: CALL_OW 49
3031: NOT
3032: IFFALSE 3055
// PlaceUnitXYR ( i , 25 , 43 , 6 , false ) ;
3034: LD_VAR 0 2
3038: PPUSH
3039: LD_INT 25
3041: PPUSH
3042: LD_INT 43
3044: PPUSH
3045: LD_INT 6
3047: PPUSH
3048: LD_INT 0
3050: PPUSH
3051: CALL_OW 50
// end ;
3055: GO 2917
3057: POP
3058: POP
// for i in UnitFilter ( starting_humans , [ f_not , [ f_driving ] ] ) ^ Gonzo do
3059: LD_ADDR_VAR 0 2
3063: PUSH
3064: LD_EXP 85
3068: PPUSH
3069: LD_INT 3
3071: PUSH
3072: LD_INT 55
3074: PUSH
3075: EMPTY
3076: LIST
3077: PUSH
3078: EMPTY
3079: LIST
3080: LIST
3081: PPUSH
3082: CALL_OW 72
3086: PUSH
3087: LD_EXP 11
3091: ADD
3092: PUSH
3093: FOR_IN
3094: IFFALSE 3125
// begin SetDir ( i , 1 ) ;
3096: LD_VAR 0 2
3100: PPUSH
3101: LD_INT 1
3103: PPUSH
3104: CALL_OW 233
// PlaceUnitArea ( i , enter_area , false ) ;
3108: LD_VAR 0 2
3112: PPUSH
3113: LD_INT 18
3115: PPUSH
3116: LD_INT 0
3118: PPUSH
3119: CALL_OW 49
// end ;
3123: GO 3093
3125: POP
3126: POP
// Gensher = NewCharacter ( Dietrich ) ;
3127: LD_ADDR_EXP 12
3131: PUSH
3132: LD_STRING Dietrich
3134: PPUSH
3135: CALL_OW 25
3139: ST_TO_ADDR
// InitHc ;
3140: CALL_OW 19
// InitUc ;
3144: CALL_OW 18
// uc_side = you_alt ;
3148: LD_ADDR_OWVAR 20
3152: PUSH
3153: LD_EXP 5
3157: ST_TO_ADDR
// uc_nation = nation_arabian ;
3158: LD_ADDR_OWVAR 21
3162: PUSH
3163: LD_INT 2
3165: ST_TO_ADDR
// PrepareSoldier ( sex_male , 6 ) ;
3166: LD_INT 1
3168: PPUSH
3169: LD_INT 6
3171: PPUSH
3172: CALL_OW 381
// scout = CreateHuman ;
3176: LD_ADDR_EXP 14
3180: PUSH
3181: CALL_OW 44
3185: ST_TO_ADDR
// PlaceUnitXY ( scout , 63 , 44 , false ) ;
3186: LD_EXP 14
3190: PPUSH
3191: LD_INT 63
3193: PPUSH
3194: LD_INT 44
3196: PPUSH
3197: LD_INT 0
3199: PPUSH
3200: CALL_OW 48
// ComTurnXY ( scout , ShiftX ( 63 , 4 , 1 ) , ShiftY ( 44 , 4 , 1 ) ) ;
3204: LD_EXP 14
3208: PPUSH
3209: LD_INT 63
3211: PPUSH
3212: LD_INT 4
3214: PPUSH
3215: LD_INT 1
3217: PPUSH
3218: CALL_OW 272
3222: PPUSH
3223: LD_INT 44
3225: PPUSH
3226: LD_INT 4
3228: PPUSH
3229: LD_INT 1
3231: PPUSH
3232: CALL_OW 273
3236: PPUSH
3237: CALL_OW 118
// num_traitors = [ 5 , 4 , 3 ] [ difficulty ] ;
3241: LD_ADDR_VAR 0 3
3245: PUSH
3246: LD_INT 5
3248: PUSH
3249: LD_INT 4
3251: PUSH
3252: LD_INT 3
3254: PUSH
3255: EMPTY
3256: LIST
3257: LIST
3258: LIST
3259: PUSH
3260: LD_OWVAR 67
3264: ARRAY
3265: ST_TO_ADDR
// traitors_humans = [ ] ;
3266: LD_ADDR_EXP 68
3270: PUSH
3271: EMPTY
3272: ST_TO_ADDR
// if not testing then
3273: LD_EXP 1
3277: NOT
3278: IFFALSE 3568
// begin traitors_leader = 0 ;
3280: LD_ADDR_EXP 15
3284: PUSH
3285: LD_INT 0
3287: ST_TO_ADDR
// if TestCharacters ( Gordon_07_cont ) then
3288: LD_STRING Gordon_07_cont
3290: PPUSH
3291: CALL_OW 28
3295: IFFALSE 3312
// traitors_leader = CreateCharacter ( Gordon_07_cont ) else
3297: LD_ADDR_EXP 15
3301: PUSH
3302: LD_STRING Gordon_07_cont
3304: PPUSH
3305: CALL_OW 34
3309: ST_TO_ADDR
3310: GO 3358
// if TestCharacters ( Gordon_07_not_sel ) then
3312: LD_STRING Gordon_07_not_sel
3314: PPUSH
3315: CALL_OW 28
3319: IFFALSE 3336
// traitors_leader = CreateCharacter ( Gordon_07_not_sel ) else
3321: LD_ADDR_EXP 15
3325: PUSH
3326: LD_STRING Gordon_07_not_sel
3328: PPUSH
3329: CALL_OW 34
3333: ST_TO_ADDR
3334: GO 3358
// if TestCharacters ( Gordon_05_cont ) then
3336: LD_STRING Gordon_05_cont
3338: PPUSH
3339: CALL_OW 28
3343: IFFALSE 3358
// traitors_leader = CreateCharacter ( Gordon_05_cont ) ;
3345: LD_ADDR_EXP 15
3349: PUSH
3350: LD_STRING Gordon_05_cont
3352: PPUSH
3353: CALL_OW 34
3357: ST_TO_ADDR
// if traitors_leader > 0 then
3358: LD_EXP 15
3362: PUSH
3363: LD_INT 0
3365: GREATER
3366: IFFALSE 3390
// begin traitors_leader_is_substitute = false ;
3368: LD_ADDR_EXP 67
3372: PUSH
3373: LD_INT 0
3375: ST_TO_ADDR
// SetClass ( traitors_leader , class_soldier ) ;
3376: LD_EXP 15
3380: PPUSH
3381: LD_INT 1
3383: PPUSH
3384: CALL_OW 336
// end else
3388: GO 3418
// begin traitors_leader_is_substitute = true ;
3390: LD_ADDR_EXP 67
3394: PUSH
3395: LD_INT 1
3397: ST_TO_ADDR
// PrepareSoldier ( sex_male , 6 ) ;
3398: LD_INT 1
3400: PPUSH
3401: LD_INT 6
3403: PPUSH
3404: CALL_OW 381
// traitors_leader = CreateHuman ;
3408: LD_ADDR_EXP 15
3412: PUSH
3413: CALL_OW 44
3417: ST_TO_ADDR
// end ; traitors_humans = traitors_humans ^ traitors_leader ;
3418: LD_ADDR_EXP 68
3422: PUSH
3423: LD_EXP 68
3427: PUSH
3428: LD_EXP 15
3432: ADD
3433: ST_TO_ADDR
// Willard = 0 ;
3434: LD_ADDR_EXP 16
3438: PUSH
3439: LD_INT 0
3441: ST_TO_ADDR
// if TestCharacters ( Willard_07_cont ) then
3442: LD_STRING Willard_07_cont
3444: PPUSH
3445: CALL_OW 28
3449: IFFALSE 3466
// Willard = CreateCharacter ( Willard_07_cont ) else
3451: LD_ADDR_EXP 16
3455: PUSH
3456: LD_STRING Willard_07_cont
3458: PPUSH
3459: CALL_OW 34
3463: ST_TO_ADDR
3464: GO 3512
// if TestCharacters ( Willard_07_not_sel ) then
3466: LD_STRING Willard_07_not_sel
3468: PPUSH
3469: CALL_OW 28
3473: IFFALSE 3490
// Willard = CreateCharacter ( Willard_07_not_sel ) else
3475: LD_ADDR_EXP 16
3479: PUSH
3480: LD_STRING Willard_07_not_sel
3482: PPUSH
3483: CALL_OW 34
3487: ST_TO_ADDR
3488: GO 3512
// if TestCharacters ( Willard_05_cont ) then
3490: LD_STRING Willard_05_cont
3492: PPUSH
3493: CALL_OW 28
3497: IFFALSE 3512
// Willard = CreateCharacter ( Willard_05_cont ) ;
3499: LD_ADDR_EXP 16
3503: PUSH
3504: LD_STRING Willard_05_cont
3506: PPUSH
3507: CALL_OW 34
3511: ST_TO_ADDR
// if Willard = 0 then
3512: LD_EXP 16
3516: PUSH
3517: LD_INT 0
3519: EQUAL
3520: IFFALSE 3538
// num_traitors = num_traitors + 1 else
3522: LD_ADDR_VAR 0 3
3526: PUSH
3527: LD_VAR 0 3
3531: PUSH
3532: LD_INT 1
3534: PLUS
3535: ST_TO_ADDR
3536: GO 3566
// begin traitors_humans = traitors_humans ^ Willard ;
3538: LD_ADDR_EXP 68
3542: PUSH
3543: LD_EXP 68
3547: PUSH
3548: LD_EXP 16
3552: ADD
3553: ST_TO_ADDR
// SetClass ( Willard , class_mechanic ) ;
3554: LD_EXP 16
3558: PPUSH
3559: LD_INT 3
3561: PPUSH
3562: CALL_OW 336
// end ; end else
3566: GO 3664
// begin PrepareSoldier ( sex_male , 6 ) ;
3568: LD_INT 1
3570: PPUSH
3571: LD_INT 6
3573: PPUSH
3574: CALL_OW 381
// hc_name = Gordon ;
3578: LD_ADDR_OWVAR 26
3582: PUSH
3583: LD_STRING Gordon
3585: ST_TO_ADDR
// traitors_leader = CreateHuman ;
3586: LD_ADDR_EXP 15
3590: PUSH
3591: CALL_OW 44
3595: ST_TO_ADDR
// traitors_humans = traitors_humans ^ traitors_leader ;
3596: LD_ADDR_EXP 68
3600: PUSH
3601: LD_EXP 68
3605: PUSH
3606: LD_EXP 15
3610: ADD
3611: ST_TO_ADDR
// PrepareMechanic ( sex_male , 6 ) ;
3612: LD_INT 1
3614: PPUSH
3615: LD_INT 6
3617: PPUSH
3618: CALL_OW 383
// hc_name = Willard ;
3622: LD_ADDR_OWVAR 26
3626: PUSH
3627: LD_STRING Willard
3629: ST_TO_ADDR
// Willard = CreateHuman ;
3630: LD_ADDR_EXP 16
3634: PUSH
3635: CALL_OW 44
3639: ST_TO_ADDR
// traitors_humans = traitors_humans ^ Willard ;
3640: LD_ADDR_EXP 68
3644: PUSH
3645: LD_EXP 68
3649: PUSH
3650: LD_EXP 16
3654: ADD
3655: ST_TO_ADDR
// hc_name =  ;
3656: LD_ADDR_OWVAR 26
3660: PUSH
3661: LD_STRING 
3663: ST_TO_ADDR
// end ; num = 2 ;
3664: LD_ADDR_VAR 0 4
3668: PUSH
3669: LD_INT 2
3671: ST_TO_ADDR
// if num > num_traitors then
3672: LD_VAR 0 4
3676: PUSH
3677: LD_VAR 0 3
3681: GREATER
3682: IFFALSE 3694
// num = num_traitors ;
3684: LD_ADDR_VAR 0 4
3688: PUSH
3689: LD_VAR 0 3
3693: ST_TO_ADDR
// num_traitors = num_traitors - num ;
3694: LD_ADDR_VAR 0 3
3698: PUSH
3699: LD_VAR 0 3
3703: PUSH
3704: LD_VAR 0 4
3708: MINUS
3709: ST_TO_ADDR
// for i = 1 to num do
3710: LD_ADDR_VAR 0 2
3714: PUSH
3715: DOUBLE
3716: LD_INT 1
3718: DEC
3719: ST_TO_ADDR
3720: LD_VAR 0 4
3724: PUSH
3725: FOR_TO
3726: IFFALSE 3756
// begin PrepareScientist ( false , 6 ) ;
3728: LD_INT 0
3730: PPUSH
3731: LD_INT 6
3733: PPUSH
3734: CALL_OW 384
// traitors_humans = traitors_humans ^ CreateHuman ;
3738: LD_ADDR_EXP 68
3742: PUSH
3743: LD_EXP 68
3747: PUSH
3748: CALL_OW 44
3752: ADD
3753: ST_TO_ADDR
// end ;
3754: GO 3725
3756: POP
3757: POP
// num = num_traitors div 2 + 1 ;
3758: LD_ADDR_VAR 0 4
3762: PUSH
3763: LD_VAR 0 3
3767: PUSH
3768: LD_INT 2
3770: DIV
3771: PUSH
3772: LD_INT 1
3774: PLUS
3775: ST_TO_ADDR
// if num > num_traitors then
3776: LD_VAR 0 4
3780: PUSH
3781: LD_VAR 0 3
3785: GREATER
3786: IFFALSE 3798
// num = num_traitors ;
3788: LD_ADDR_VAR 0 4
3792: PUSH
3793: LD_VAR 0 3
3797: ST_TO_ADDR
// num_traitors = num_traitors - num ;
3798: LD_ADDR_VAR 0 3
3802: PUSH
3803: LD_VAR 0 3
3807: PUSH
3808: LD_VAR 0 4
3812: MINUS
3813: ST_TO_ADDR
// for i = 1 to num do
3814: LD_ADDR_VAR 0 2
3818: PUSH
3819: DOUBLE
3820: LD_INT 1
3822: DEC
3823: ST_TO_ADDR
3824: LD_VAR 0 4
3828: PUSH
3829: FOR_TO
3830: IFFALSE 3860
// begin PrepareMechanic ( false , 6 ) ;
3832: LD_INT 0
3834: PPUSH
3835: LD_INT 6
3837: PPUSH
3838: CALL_OW 383
// traitors_humans = traitors_humans ^ CreateHuman ;
3842: LD_ADDR_EXP 68
3846: PUSH
3847: LD_EXP 68
3851: PUSH
3852: CALL_OW 44
3856: ADD
3857: ST_TO_ADDR
// end ;
3858: GO 3829
3860: POP
3861: POP
// for i = 1 to num_traitors do
3862: LD_ADDR_VAR 0 2
3866: PUSH
3867: DOUBLE
3868: LD_INT 1
3870: DEC
3871: ST_TO_ADDR
3872: LD_VAR 0 3
3876: PUSH
3877: FOR_TO
3878: IFFALSE 3908
// begin PrepareSoldier ( false , 6 ) ;
3880: LD_INT 0
3882: PPUSH
3883: LD_INT 6
3885: PPUSH
3886: CALL_OW 381
// traitors_humans = traitors_humans ^ CreateHuman ;
3890: LD_ADDR_EXP 68
3894: PUSH
3895: LD_EXP 68
3899: PUSH
3900: CALL_OW 44
3904: ADD
3905: ST_TO_ADDR
// end ;
3906: GO 3877
3908: POP
3909: POP
// InitVc ;
3910: CALL_OW 20
// uc_nation = nation_american ;
3914: LD_ADDR_OWVAR 21
3918: PUSH
3919: LD_INT 1
3921: ST_TO_ADDR
// vc_control = control_manual ;
3922: LD_ADDR_OWVAR 38
3926: PUSH
3927: LD_INT 1
3929: ST_TO_ADDR
// vc_engine = engine_siberite ;
3930: LD_ADDR_OWVAR 39
3934: PUSH
3935: LD_INT 3
3937: ST_TO_ADDR
// num_traitors = [ 4 , 3 , 2 ] [ difficulty ] ;
3938: LD_ADDR_VAR 0 3
3942: PUSH
3943: LD_INT 4
3945: PUSH
3946: LD_INT 3
3948: PUSH
3949: LD_INT 2
3951: PUSH
3952: EMPTY
3953: LIST
3954: LIST
3955: LIST
3956: PUSH
3957: LD_OWVAR 67
3961: ARRAY
3962: ST_TO_ADDR
// traitors_vehicles = [ ] ;
3963: LD_ADDR_EXP 69
3967: PUSH
3968: EMPTY
3969: ST_TO_ADDR
// num = 0 ;
3970: LD_ADDR_VAR 0 4
3974: PUSH
3975: LD_INT 0
3977: ST_TO_ADDR
// for i = 1 to num_traitors do
3978: LD_ADDR_VAR 0 2
3982: PUSH
3983: DOUBLE
3984: LD_INT 1
3986: DEC
3987: ST_TO_ADDR
3988: LD_VAR 0 3
3992: PUSH
3993: FOR_TO
3994: IFFALSE 4227
// begin uc_direction = Rand ( 0 , 5 ) ;
3996: LD_ADDR_OWVAR 24
4000: PUSH
4001: LD_INT 0
4003: PPUSH
4004: LD_INT 5
4006: PPUSH
4007: CALL_OW 12
4011: ST_TO_ADDR
// if Rand ( 1 , 6 ) <= [ 4 , 3 , 2 ] [ difficulty ] then
4012: LD_INT 1
4014: PPUSH
4015: LD_INT 6
4017: PPUSH
4018: CALL_OW 12
4022: PUSH
4023: LD_INT 4
4025: PUSH
4026: LD_INT 3
4028: PUSH
4029: LD_INT 2
4031: PUSH
4032: EMPTY
4033: LIST
4034: LIST
4035: LIST
4036: PUSH
4037: LD_OWVAR 67
4041: ARRAY
4042: LESSEQUAL
4043: IFFALSE 4055
// vc_chassis = us_heavy_tracked else
4045: LD_ADDR_OWVAR 37
4049: PUSH
4050: LD_INT 4
4052: ST_TO_ADDR
4053: GO 4063
// vc_chassis = us_medium_tracked ;
4055: LD_ADDR_OWVAR 37
4059: PUSH
4060: LD_INT 3
4062: ST_TO_ADDR
// if i = 1 then
4063: LD_VAR 0 2
4067: PUSH
4068: LD_INT 1
4070: EQUAL
4071: IFFALSE 4083
// vc_weapon = us_laser else
4073: LD_ADDR_OWVAR 40
4077: PUSH
4078: LD_INT 9
4080: ST_TO_ADDR
4081: GO 4209
// if num = 1 or Rand ( 1 , 2 ) <= 1 then
4083: LD_VAR 0 4
4087: PUSH
4088: LD_INT 1
4090: EQUAL
4091: PUSH
4092: LD_INT 1
4094: PPUSH
4095: LD_INT 2
4097: PPUSH
4098: CALL_OW 12
4102: PUSH
4103: LD_INT 1
4105: LESSEQUAL
4106: OR
4107: IFFALSE 4145
// begin if Rand ( 1 , 2 ) = 1 then
4109: LD_INT 1
4111: PPUSH
4112: LD_INT 2
4114: PPUSH
4115: CALL_OW 12
4119: PUSH
4120: LD_INT 1
4122: EQUAL
4123: IFFALSE 4135
// vc_weapon = us_double_gun else
4125: LD_ADDR_OWVAR 40
4129: PUSH
4130: LD_INT 5
4132: ST_TO_ADDR
4133: GO 4143
// vc_weapon = us_rocket_launcher ;
4135: LD_ADDR_OWVAR 40
4139: PUSH
4140: LD_INT 7
4142: ST_TO_ADDR
// end else
4143: GO 4209
// begin num = num + 1 ;
4145: LD_ADDR_VAR 0 4
4149: PUSH
4150: LD_VAR 0 4
4154: PUSH
4155: LD_INT 1
4157: PLUS
4158: ST_TO_ADDR
// if difficulty > 1 and Rand ( 1 , 5 - difficulty ) = 1 then
4159: LD_OWVAR 67
4163: PUSH
4164: LD_INT 1
4166: GREATER
4167: PUSH
4168: LD_INT 1
4170: PPUSH
4171: LD_INT 5
4173: PUSH
4174: LD_OWVAR 67
4178: MINUS
4179: PPUSH
4180: CALL_OW 12
4184: PUSH
4185: LD_INT 1
4187: EQUAL
4188: AND
4189: IFFALSE 4201
// vc_weapon = us_machine_gun else
4191: LD_ADDR_OWVAR 40
4195: PUSH
4196: LD_INT 2
4198: ST_TO_ADDR
4199: GO 4209
// vc_weapon = us_gatling_gun ;
4201: LD_ADDR_OWVAR 40
4205: PUSH
4206: LD_INT 4
4208: ST_TO_ADDR
// end ; traitors_vehicles = traitors_vehicles ^ CreateVehicle ;
4209: LD_ADDR_EXP 69
4213: PUSH
4214: LD_EXP 69
4218: PUSH
4219: CALL_OW 45
4223: ADD
4224: ST_TO_ADDR
// end ;
4225: GO 3993
4227: POP
4228: POP
// for i in traitors_vehicles ^ traitors_humans do
4229: LD_ADDR_VAR 0 2
4233: PUSH
4234: LD_EXP 69
4238: PUSH
4239: LD_EXP 68
4243: ADD
4244: PUSH
4245: FOR_IN
4246: IFFALSE 4271
// PlaceUnitXYR ( i , 116 , 78 , 6 , false ) ;
4248: LD_VAR 0 2
4252: PPUSH
4253: LD_INT 116
4255: PPUSH
4256: LD_INT 78
4258: PPUSH
4259: LD_INT 6
4261: PPUSH
4262: LD_INT 0
4264: PPUSH
4265: CALL_OW 50
4269: GO 4245
4271: POP
4272: POP
// original_traitors_humans = traitors_humans ;
4273: LD_ADDR_EXP 73
4277: PUSH
4278: LD_EXP 68
4282: ST_TO_ADDR
// CreateMinesInArea ( mine_area_1 , difficulty + 1 , you_alt , 0 ) ;
4283: LD_INT 14
4285: PPUSH
4286: LD_OWVAR 67
4290: PUSH
4291: LD_INT 1
4293: PLUS
4294: PPUSH
4295: LD_EXP 5
4299: PPUSH
4300: LD_INT 0
4302: PPUSH
4303: CALL 4364 0 4
// CreateMinesInArea ( mine_area_2 , ( difficulty + 2 ) * 2 , you_alt , 0 ) ;
4307: LD_INT 15
4309: PPUSH
4310: LD_OWVAR 67
4314: PUSH
4315: LD_INT 2
4317: PLUS
4318: PUSH
4319: LD_INT 2
4321: MUL
4322: PPUSH
4323: LD_EXP 5
4327: PPUSH
4328: LD_INT 0
4330: PPUSH
4331: CALL 4364 0 4
// CreateMinesInArea ( mine_area_3 , difficulty + 2 , you_alt , 0 ) ;
4335: LD_INT 16
4337: PPUSH
4338: LD_OWVAR 67
4342: PUSH
4343: LD_INT 2
4345: PLUS
4346: PPUSH
4347: LD_EXP 5
4351: PPUSH
4352: LD_INT 0
4354: PPUSH
4355: CALL 4364 0 4
// end ;
4359: LD_VAR 0 1
4363: RET
// function CreateMinesInArea ( area , number , side , n ) ; var hex , i , safety ; begin
4364: LD_INT 0
4366: PPUSH
4367: PPUSH
4368: PPUSH
4369: PPUSH
// for i = 1 to number do
4370: LD_ADDR_VAR 0 7
4374: PUSH
4375: DOUBLE
4376: LD_INT 1
4378: DEC
4379: ST_TO_ADDR
4380: LD_VAR 0 2
4384: PUSH
4385: FOR_TO
4386: IFFALSE 4521
// begin safety = 0 ;
4388: LD_ADDR_VAR 0 8
4392: PUSH
4393: LD_INT 0
4395: ST_TO_ADDR
// repeat hex = RandHexArea ( area , false ) ;
4396: LD_ADDR_VAR 0 6
4400: PUSH
4401: LD_VAR 0 1
4405: PPUSH
4406: LD_INT 0
4408: PPUSH
4409: CALL_OW 16
4413: ST_TO_ADDR
// safety = safety + 1 ;
4414: LD_ADDR_VAR 0 8
4418: PUSH
4419: LD_VAR 0 8
4423: PUSH
4424: LD_INT 1
4426: PLUS
4427: ST_TO_ADDR
// until not hex in mines_hexes or safety > 20 ;
4428: LD_VAR 0 6
4432: PUSH
4433: LD_EXP 99
4437: IN
4438: NOT
4439: PUSH
4440: LD_VAR 0 8
4444: PUSH
4445: LD_INT 20
4447: GREATER
4448: OR
4449: IFFALSE 4396
// if not hex in mines_hexes then
4451: LD_VAR 0 6
4455: PUSH
4456: LD_EXP 99
4460: IN
4461: NOT
4462: IFFALSE 4519
// begin PlaceMine ( hex [ 1 ] , hex [ 2 ] , side , n ) ;
4464: LD_VAR 0 6
4468: PUSH
4469: LD_INT 1
4471: ARRAY
4472: PPUSH
4473: LD_VAR 0 6
4477: PUSH
4478: LD_INT 2
4480: ARRAY
4481: PPUSH
4482: LD_VAR 0 3
4486: PPUSH
4487: LD_VAR 0 4
4491: PPUSH
4492: CALL_OW 454
// mines_hexes = Insert ( mines_hexes , 1 , hex ) ;
4496: LD_ADDR_EXP 99
4500: PUSH
4501: LD_EXP 99
4505: PPUSH
4506: LD_INT 1
4508: PPUSH
4509: LD_VAR 0 6
4513: PPUSH
4514: CALL_OW 2
4518: ST_TO_ADDR
// end ; end ;
4519: GO 4385
4521: POP
4522: POP
// end ;
4523: LD_VAR 0 5
4527: RET
// function ScanBuildings ; var side , i , temp_list , base , area ; begin
4528: LD_INT 0
4530: PPUSH
4531: PPUSH
4532: PPUSH
4533: PPUSH
4534: PPUSH
4535: PPUSH
// side = russians ;
4536: LD_ADDR_VAR 0 2
4540: PUSH
4541: LD_EXP 3
4545: ST_TO_ADDR
// for base in ai_bases do
4546: LD_ADDR_VAR 0 5
4550: PUSH
4551: LD_EXP 49
4555: PUSH
4556: FOR_IN
4557: IFFALSE 5124
// begin if difficulty = 3 then
4559: LD_OWVAR 67
4563: PUSH
4564: LD_INT 3
4566: EQUAL
4567: IFFALSE 4636
// begin for i in FilterAllUnits ( [ [ f_side , russians ] , [ f_btype , b_ext_noncombat ] ] ) do
4569: LD_ADDR_VAR 0 3
4573: PUSH
4574: LD_INT 22
4576: PUSH
4577: LD_EXP 3
4581: PUSH
4582: EMPTY
4583: LIST
4584: LIST
4585: PUSH
4586: LD_INT 30
4588: PUSH
4589: LD_INT 19
4591: PUSH
4592: EMPTY
4593: LIST
4594: LIST
4595: PUSH
4596: EMPTY
4597: LIST
4598: LIST
4599: PPUSH
4600: CALL_OW 69
4604: PUSH
4605: FOR_IN
4606: IFFALSE 4619
// DestroyUnit ( i ) ;
4608: LD_VAR 0 3
4612: PPUSH
4613: CALL_OW 65
4617: GO 4605
4619: POP
4620: POP
// SetRestrict ( b_ext_noncombat , you , false ) ;
4621: LD_INT 19
4623: PPUSH
4624: LD_EXP 2
4628: PPUSH
4629: LD_INT 0
4631: PPUSH
4632: CALL_OW 324
// end ; case base of 1 :
4636: LD_VAR 0 5
4640: PUSH
4641: LD_INT 1
4643: DOUBLE
4644: EQUAL
4645: IFTRUE 4649
4647: GO 4660
4649: POP
// area = ru_base_area ; end ;
4650: LD_ADDR_VAR 0 6
4654: PUSH
4655: LD_INT 1
4657: ST_TO_ADDR
4658: GO 4661
4660: POP
// ai_all_buildings = Replace ( ai_all_buildings , base , FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_building ] , [ f_inarea , area ] ] ) ) ;
4661: LD_ADDR_EXP 34
4665: PUSH
4666: LD_EXP 34
4670: PPUSH
4671: LD_VAR 0 5
4675: PPUSH
4676: LD_INT 22
4678: PUSH
4679: LD_VAR 0 2
4683: PUSH
4684: EMPTY
4685: LIST
4686: LIST
4687: PUSH
4688: LD_INT 21
4690: PUSH
4691: LD_INT 3
4693: PUSH
4694: EMPTY
4695: LIST
4696: LIST
4697: PUSH
4698: LD_INT 95
4700: PUSH
4701: LD_VAR 0 6
4705: PUSH
4706: EMPTY
4707: LIST
4708: LIST
4709: PUSH
4710: EMPTY
4711: LIST
4712: LIST
4713: LIST
4714: PPUSH
4715: CALL_OW 69
4719: PPUSH
4720: CALL_OW 1
4724: ST_TO_ADDR
// for i in ai_all_buildings [ base ] do
4725: LD_ADDR_VAR 0 3
4729: PUSH
4730: LD_EXP 34
4734: PUSH
4735: LD_VAR 0 5
4739: ARRAY
4740: PUSH
4741: FOR_IN
4742: IFFALSE 4763
// UpdateBuildingBasicVariables ( base , i , true ) ;
4744: LD_VAR 0 5
4748: PPUSH
4749: LD_VAR 0 3
4753: PPUSH
4754: LD_INT 1
4756: PPUSH
4757: CALL 5131 0 3
4761: GO 4741
4763: POP
4764: POP
// temp_list = [ ] ;
4765: LD_ADDR_VAR 0 4
4769: PUSH
4770: EMPTY
4771: ST_TO_ADDR
// for i in ai_all_buildings [ base ] do
4772: LD_ADDR_VAR 0 3
4776: PUSH
4777: LD_EXP 34
4781: PUSH
4782: LD_VAR 0 5
4786: ARRAY
4787: PUSH
4788: FOR_IN
4789: IFFALSE 4892
// temp_list = temp_list ^ [ [ GetX ( i ) , GetY ( i ) , GetDir ( i ) , GetBType ( i ) , GetLabKind ( i , 1 ) , GetLabKind ( i , 2 ) , GetBWeapon ( i ) ] ] ;
4791: LD_ADDR_VAR 0 4
4795: PUSH
4796: LD_VAR 0 4
4800: PUSH
4801: LD_VAR 0 3
4805: PPUSH
4806: CALL_OW 250
4810: PUSH
4811: LD_VAR 0 3
4815: PPUSH
4816: CALL_OW 251
4820: PUSH
4821: LD_VAR 0 3
4825: PPUSH
4826: CALL_OW 254
4830: PUSH
4831: LD_VAR 0 3
4835: PPUSH
4836: CALL_OW 266
4840: PUSH
4841: LD_VAR 0 3
4845: PPUSH
4846: LD_INT 1
4848: PPUSH
4849: CALL_OW 268
4853: PUSH
4854: LD_VAR 0 3
4858: PPUSH
4859: LD_INT 2
4861: PPUSH
4862: CALL_OW 268
4866: PUSH
4867: LD_VAR 0 3
4871: PPUSH
4872: CALL_OW 269
4876: PUSH
4877: EMPTY
4878: LIST
4879: LIST
4880: LIST
4881: LIST
4882: LIST
4883: LIST
4884: LIST
4885: PUSH
4886: EMPTY
4887: LIST
4888: ADD
4889: ST_TO_ADDR
4890: GO 4788
4892: POP
4893: POP
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list ) ;
4894: LD_ADDR_EXP 27
4898: PUSH
4899: LD_EXP 27
4903: PPUSH
4904: LD_VAR 0 5
4908: PPUSH
4909: LD_VAR 0 4
4913: PPUSH
4914: CALL_OW 1
4918: ST_TO_ADDR
// SortBuildingLocationsListInCorrectOrder ( base ) ;
4919: LD_VAR 0 5
4923: PPUSH
4924: CALL 6121 0 1
// for i in ai_siberite_mines [ base ] ^ ai_oil_mine [ base ] do
4928: LD_ADDR_VAR 0 3
4932: PUSH
4933: LD_EXP 25
4937: PUSH
4938: LD_VAR 0 5
4942: ARRAY
4943: PUSH
4944: LD_EXP 41
4948: PUSH
4949: LD_VAR 0 5
4953: ARRAY
4954: ADD
4955: PUSH
4956: FOR_IN
4957: IFFALSE 4990
// SetResourceVisibility ( GetX ( i ) , GetY ( i ) , side ) ;
4959: LD_VAR 0 3
4963: PPUSH
4964: CALL_OW 250
4968: PPUSH
4969: LD_VAR 0 3
4973: PPUSH
4974: CALL_OW 251
4978: PPUSH
4979: LD_VAR 0 2
4983: PPUSH
4984: CALL_OW 441
4988: GO 4956
4990: POP
4991: POP
// temp_list = [ ] ;
4992: LD_ADDR_VAR 0 4
4996: PUSH
4997: EMPTY
4998: ST_TO_ADDR
// for i in ai_bunkers [ base ] do
4999: LD_ADDR_VAR 0 3
5003: PUSH
5004: LD_EXP 40
5008: PUSH
5009: LD_VAR 0 5
5013: ARRAY
5014: PUSH
5015: FOR_IN
5016: IFFALSE 5041
// temp_list = temp_list ^ GetY ( i ) ;
5018: LD_ADDR_VAR 0 4
5022: PUSH
5023: LD_VAR 0 4
5027: PUSH
5028: LD_VAR 0 3
5032: PPUSH
5033: CALL_OW 251
5037: ADD
5038: ST_TO_ADDR
5039: GO 5015
5041: POP
5042: POP
// i = WorstFromListByList ( ai_bunkers [ base ] , temp_list ) ;
5043: LD_ADDR_VAR 0 3
5047: PUSH
5048: LD_EXP 40
5052: PUSH
5053: LD_VAR 0 5
5057: ARRAY
5058: PPUSH
5059: LD_VAR 0 4
5063: PPUSH
5064: CALL_OW 78
5068: ST_TO_ADDR
// temp_list = i ^ ( ai_bunkers [ base ] diff i ) ;
5069: LD_ADDR_VAR 0 4
5073: PUSH
5074: LD_VAR 0 3
5078: PUSH
5079: LD_EXP 40
5083: PUSH
5084: LD_VAR 0 5
5088: ARRAY
5089: PUSH
5090: LD_VAR 0 3
5094: DIFF
5095: ADD
5096: ST_TO_ADDR
// ai_bunkers = Replace ( ai_bunkers , base , temp_list ) ;
5097: LD_ADDR_EXP 40
5101: PUSH
5102: LD_EXP 40
5106: PPUSH
5107: LD_VAR 0 5
5111: PPUSH
5112: LD_VAR 0 4
5116: PPUSH
5117: CALL_OW 1
5121: ST_TO_ADDR
// end ;
5122: GO 4556
5124: POP
5125: POP
// end ;
5126: LD_VAR 0 1
5130: RET
// export function UpdateBuildingBasicVariables ( base , un , add ) ; var temp_list ; begin
5131: LD_INT 0
5133: PPUSH
5134: PPUSH
// case GetBType ( un ) of b_depot , b_warehouse :
5135: LD_VAR 0 2
5139: PPUSH
5140: CALL_OW 266
5144: PUSH
5145: LD_INT 0
5147: DOUBLE
5148: EQUAL
5149: IFTRUE 5159
5151: LD_INT 1
5153: DOUBLE
5154: EQUAL
5155: IFTRUE 5159
5157: GO 5236
5159: POP
// if add then
5160: LD_VAR 0 3
5164: IFFALSE 5193
// ai_depot = Replace ( ai_depot , base , un ) else
5166: LD_ADDR_EXP 23
5170: PUSH
5171: LD_EXP 23
5175: PPUSH
5176: LD_VAR 0 1
5180: PPUSH
5181: LD_VAR 0 2
5185: PPUSH
5186: CALL_OW 1
5190: ST_TO_ADDR
5191: GO 5234
// if un = ai_depot [ base ] then
5193: LD_VAR 0 2
5197: PUSH
5198: LD_EXP 23
5202: PUSH
5203: LD_VAR 0 1
5207: ARRAY
5208: EQUAL
5209: IFFALSE 5234
// ai_depot = Replace ( ai_depot , base , 0 ) ; b_lab , b_lab_half , b_lab_full :
5211: LD_ADDR_EXP 23
5215: PUSH
5216: LD_EXP 23
5220: PPUSH
5221: LD_VAR 0 1
5225: PPUSH
5226: LD_INT 0
5228: PPUSH
5229: CALL_OW 1
5233: ST_TO_ADDR
5234: GO 6116
5236: LD_INT 6
5238: DOUBLE
5239: EQUAL
5240: IFTRUE 5256
5242: LD_INT 7
5244: DOUBLE
5245: EQUAL
5246: IFTRUE 5256
5248: LD_INT 8
5250: DOUBLE
5251: EQUAL
5252: IFTRUE 5256
5254: GO 5336
5256: POP
// begin if add then
5257: LD_VAR 0 3
5261: IFFALSE 5287
// temp_list = ai_labs [ base ] ^ un else
5263: LD_ADDR_VAR 0 5
5267: PUSH
5268: LD_EXP 24
5272: PUSH
5273: LD_VAR 0 1
5277: ARRAY
5278: PUSH
5279: LD_VAR 0 2
5283: ADD
5284: ST_TO_ADDR
5285: GO 5309
// temp_list = ai_labs [ base ] diff un ;
5287: LD_ADDR_VAR 0 5
5291: PUSH
5292: LD_EXP 24
5296: PUSH
5297: LD_VAR 0 1
5301: ARRAY
5302: PUSH
5303: LD_VAR 0 2
5307: DIFF
5308: ST_TO_ADDR
// ai_labs = Replace ( ai_labs , base , temp_list ) ;
5309: LD_ADDR_EXP 24
5313: PUSH
5314: LD_EXP 24
5318: PPUSH
5319: LD_VAR 0 1
5323: PPUSH
5324: LD_VAR 0 5
5328: PPUSH
5329: CALL_OW 1
5333: ST_TO_ADDR
// end ; b_factory , b_workshop :
5334: GO 6116
5336: LD_INT 3
5338: DOUBLE
5339: EQUAL
5340: IFTRUE 5350
5342: LD_INT 2
5344: DOUBLE
5345: EQUAL
5346: IFTRUE 5350
5348: GO 5430
5350: POP
// begin if add then
5351: LD_VAR 0 3
5355: IFFALSE 5381
// temp_list = ai_facts [ base ] ^ un else
5357: LD_ADDR_VAR 0 5
5361: PUSH
5362: LD_EXP 38
5366: PUSH
5367: LD_VAR 0 1
5371: ARRAY
5372: PUSH
5373: LD_VAR 0 2
5377: ADD
5378: ST_TO_ADDR
5379: GO 5403
// temp_list = ai_facts [ base ] diff un ;
5381: LD_ADDR_VAR 0 5
5385: PUSH
5386: LD_EXP 38
5390: PUSH
5391: LD_VAR 0 1
5395: ARRAY
5396: PUSH
5397: LD_VAR 0 2
5401: DIFF
5402: ST_TO_ADDR
// ai_facts = Replace ( ai_facts , base , temp_list ) ;
5403: LD_ADDR_EXP 38
5407: PUSH
5408: LD_EXP 38
5412: PPUSH
5413: LD_VAR 0 1
5417: PPUSH
5418: LD_VAR 0 5
5422: PPUSH
5423: CALL_OW 1
5427: ST_TO_ADDR
// end ; b_armoury , b_barracks :
5428: GO 6116
5430: LD_INT 4
5432: DOUBLE
5433: EQUAL
5434: IFTRUE 5444
5436: LD_INT 5
5438: DOUBLE
5439: EQUAL
5440: IFTRUE 5444
5442: GO 5524
5444: POP
// begin if add then
5445: LD_VAR 0 3
5449: IFFALSE 5475
// temp_list = ai_armouries [ base ] ^ un else
5451: LD_ADDR_VAR 0 5
5455: PUSH
5456: LD_EXP 39
5460: PUSH
5461: LD_VAR 0 1
5465: ARRAY
5466: PUSH
5467: LD_VAR 0 2
5471: ADD
5472: ST_TO_ADDR
5473: GO 5497
// temp_list = ai_armouries [ base ] diff un ;
5475: LD_ADDR_VAR 0 5
5479: PUSH
5480: LD_EXP 39
5484: PUSH
5485: LD_VAR 0 1
5489: ARRAY
5490: PUSH
5491: LD_VAR 0 2
5495: DIFF
5496: ST_TO_ADDR
// ai_armouries = Replace ( ai_armouries , base , temp_list ) ;
5497: LD_ADDR_EXP 39
5501: PUSH
5502: LD_EXP 39
5506: PPUSH
5507: LD_VAR 0 1
5511: PPUSH
5512: LD_VAR 0 5
5516: PPUSH
5517: CALL_OW 1
5521: ST_TO_ADDR
// end ; b_breastwork , b_bunker :
5522: GO 6116
5524: LD_INT 31
5526: DOUBLE
5527: EQUAL
5528: IFTRUE 5538
5530: LD_INT 32
5532: DOUBLE
5533: EQUAL
5534: IFTRUE 5538
5536: GO 5618
5538: POP
// begin if add then
5539: LD_VAR 0 3
5543: IFFALSE 5569
// temp_list = ai_bunkers [ base ] ^ un else
5545: LD_ADDR_VAR 0 5
5549: PUSH
5550: LD_EXP 40
5554: PUSH
5555: LD_VAR 0 1
5559: ARRAY
5560: PUSH
5561: LD_VAR 0 2
5565: ADD
5566: ST_TO_ADDR
5567: GO 5591
// temp_list = ai_bunkers [ base ] diff un ;
5569: LD_ADDR_VAR 0 5
5573: PUSH
5574: LD_EXP 40
5578: PUSH
5579: LD_VAR 0 1
5583: ARRAY
5584: PUSH
5585: LD_VAR 0 2
5589: DIFF
5590: ST_TO_ADDR
// ai_bunkers = Replace ( ai_bunkers , base , temp_list ) ;
5591: LD_ADDR_EXP 40
5595: PUSH
5596: LD_EXP 40
5600: PPUSH
5601: LD_VAR 0 1
5605: PPUSH
5606: LD_VAR 0 5
5610: PPUSH
5611: CALL_OW 1
5615: ST_TO_ADDR
// end ; b_turret :
5616: GO 6116
5618: LD_INT 33
5620: DOUBLE
5621: EQUAL
5622: IFTRUE 5626
5624: GO 5706
5626: POP
// begin if add then
5627: LD_VAR 0 3
5631: IFFALSE 5657
// temp_list = ai_turrets [ base ] ^ un else
5633: LD_ADDR_VAR 0 5
5637: PUSH
5638: LD_EXP 60
5642: PUSH
5643: LD_VAR 0 1
5647: ARRAY
5648: PUSH
5649: LD_VAR 0 2
5653: ADD
5654: ST_TO_ADDR
5655: GO 5679
// temp_list = ai_turrets [ base ] diff un ;
5657: LD_ADDR_VAR 0 5
5661: PUSH
5662: LD_EXP 60
5666: PUSH
5667: LD_VAR 0 1
5671: ARRAY
5672: PUSH
5673: LD_VAR 0 2
5677: DIFF
5678: ST_TO_ADDR
// ai_turrets = Replace ( ai_turrets , base , temp_list ) ;
5679: LD_ADDR_EXP 60
5683: PUSH
5684: LD_EXP 60
5688: PPUSH
5689: LD_VAR 0 1
5693: PPUSH
5694: LD_VAR 0 5
5698: PPUSH
5699: CALL_OW 1
5703: ST_TO_ADDR
// end ; b_oil_mine :
5704: GO 6116
5706: LD_INT 29
5708: DOUBLE
5709: EQUAL
5710: IFTRUE 5714
5712: GO 5791
5714: POP
// if add then
5715: LD_VAR 0 3
5719: IFFALSE 5748
// ai_oil_mine = Replace ( ai_oil_mine , base , un ) else
5721: LD_ADDR_EXP 41
5725: PUSH
5726: LD_EXP 41
5730: PPUSH
5731: LD_VAR 0 1
5735: PPUSH
5736: LD_VAR 0 2
5740: PPUSH
5741: CALL_OW 1
5745: ST_TO_ADDR
5746: GO 5789
// if un = ai_oil_mine [ base ] then
5748: LD_VAR 0 2
5752: PUSH
5753: LD_EXP 41
5757: PUSH
5758: LD_VAR 0 1
5762: ARRAY
5763: EQUAL
5764: IFFALSE 5789
// ai_oil_mine = Replace ( ai_oil_mine , base , 0 ) ; b_siberite_mine :
5766: LD_ADDR_EXP 41
5770: PUSH
5771: LD_EXP 41
5775: PPUSH
5776: LD_VAR 0 1
5780: PPUSH
5781: LD_INT 0
5783: PPUSH
5784: CALL_OW 1
5788: ST_TO_ADDR
5789: GO 6116
5791: LD_INT 30
5793: DOUBLE
5794: EQUAL
5795: IFTRUE 5799
5797: GO 5879
5799: POP
// begin if add then
5800: LD_VAR 0 3
5804: IFFALSE 5830
// temp_list = ai_siberite_mines [ base ] ^ un else
5806: LD_ADDR_VAR 0 5
5810: PUSH
5811: LD_EXP 25
5815: PUSH
5816: LD_VAR 0 1
5820: ARRAY
5821: PUSH
5822: LD_VAR 0 2
5826: ADD
5827: ST_TO_ADDR
5828: GO 5852
// temp_list = ai_siberite_mines [ base ] diff un ;
5830: LD_ADDR_VAR 0 5
5834: PUSH
5835: LD_EXP 25
5839: PUSH
5840: LD_VAR 0 1
5844: ARRAY
5845: PUSH
5846: LD_VAR 0 2
5850: DIFF
5851: ST_TO_ADDR
// ai_siberite_mines = Replace ( ai_siberite_mines , base , temp_list ) ;
5852: LD_ADDR_EXP 25
5856: PUSH
5857: LD_EXP 25
5861: PPUSH
5862: LD_VAR 0 1
5866: PPUSH
5867: LD_VAR 0 5
5871: PPUSH
5872: CALL_OW 1
5876: ST_TO_ADDR
// end ; b_ext_gun , b_ext_noncombat , b_ext_laser , b_ext_computer , b_ext_radar , b_ext_rocket , b_ext_siberium , b_ext_track , b_ext_stitch :
5877: GO 6116
5879: LD_INT 17
5881: DOUBLE
5882: EQUAL
5883: IFTRUE 5935
5885: LD_INT 19
5887: DOUBLE
5888: EQUAL
5889: IFTRUE 5935
5891: LD_INT 25
5893: DOUBLE
5894: EQUAL
5895: IFTRUE 5935
5897: LD_INT 24
5899: DOUBLE
5900: EQUAL
5901: IFTRUE 5935
5903: LD_INT 20
5905: DOUBLE
5906: EQUAL
5907: IFTRUE 5935
5909: LD_INT 18
5911: DOUBLE
5912: EQUAL
5913: IFTRUE 5935
5915: LD_INT 21
5917: DOUBLE
5918: EQUAL
5919: IFTRUE 5935
5921: LD_INT 16
5923: DOUBLE
5924: EQUAL
5925: IFTRUE 5935
5927: LD_INT 23
5929: DOUBLE
5930: EQUAL
5931: IFTRUE 5935
5933: GO 6015
5935: POP
// begin if add then
5936: LD_VAR 0 3
5940: IFFALSE 5966
// temp_list = ai_fact_extensions [ base ] ^ un else
5942: LD_ADDR_VAR 0 5
5946: PUSH
5947: LD_EXP 42
5951: PUSH
5952: LD_VAR 0 1
5956: ARRAY
5957: PUSH
5958: LD_VAR 0 2
5962: ADD
5963: ST_TO_ADDR
5964: GO 5988
// temp_list = ai_fact_extensions [ base ] diff un ;
5966: LD_ADDR_VAR 0 5
5970: PUSH
5971: LD_EXP 42
5975: PUSH
5976: LD_VAR 0 1
5980: ARRAY
5981: PUSH
5982: LD_VAR 0 2
5986: DIFF
5987: ST_TO_ADDR
// ai_fact_extensions = Replace ( ai_fact_extensions , base , temp_list ) ;
5988: LD_ADDR_EXP 42
5992: PUSH
5993: LD_EXP 42
5997: PPUSH
5998: LD_VAR 0 1
6002: PPUSH
6003: LD_VAR 0 5
6007: PPUSH
6008: CALL_OW 1
6012: ST_TO_ADDR
// end ; b_solar_power , b_oil_power , b_siberite_power :
6013: GO 6116
6015: LD_INT 27
6017: DOUBLE
6018: EQUAL
6019: IFTRUE 6035
6021: LD_INT 26
6023: DOUBLE
6024: EQUAL
6025: IFTRUE 6035
6027: LD_INT 28
6029: DOUBLE
6030: EQUAL
6031: IFTRUE 6035
6033: GO 6115
6035: POP
// begin if add then
6036: LD_VAR 0 3
6040: IFFALSE 6066
// temp_list = ai_power_plants [ base ] ^ un else
6042: LD_ADDR_VAR 0 5
6046: PUSH
6047: LD_EXP 26
6051: PUSH
6052: LD_VAR 0 1
6056: ARRAY
6057: PUSH
6058: LD_VAR 0 2
6062: ADD
6063: ST_TO_ADDR
6064: GO 6088
// temp_list = ai_power_plants [ base ] diff un ;
6066: LD_ADDR_VAR 0 5
6070: PUSH
6071: LD_EXP 26
6075: PUSH
6076: LD_VAR 0 1
6080: ARRAY
6081: PUSH
6082: LD_VAR 0 2
6086: DIFF
6087: ST_TO_ADDR
// ai_power_plants = Replace ( ai_power_plants , base , temp_list ) ;
6088: LD_ADDR_EXP 26
6092: PUSH
6093: LD_EXP 26
6097: PPUSH
6098: LD_VAR 0 1
6102: PPUSH
6103: LD_VAR 0 5
6107: PPUSH
6108: CALL_OW 1
6112: ST_TO_ADDR
// end ; end ;
6113: GO 6116
6115: POP
// end ;
6116: LD_VAR 0 4
6120: RET
// function SortBuildingLocationsListInCorrectOrder ( base ) ; var i , temp_list , p ; begin
6121: LD_INT 0
6123: PPUSH
6124: PPUSH
6125: PPUSH
6126: PPUSH
// temp_list = [ ] ;
6127: LD_ADDR_VAR 0 4
6131: PUSH
6132: EMPTY
6133: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
6134: LD_ADDR_VAR 0 3
6138: PUSH
6139: LD_EXP 27
6143: PUSH
6144: LD_VAR 0 1
6148: ARRAY
6149: PUSH
6150: FOR_IN
6151: IFFALSE 6524
// begin case i [ 4 ] of b_depot , b_warehouse :
6153: LD_VAR 0 3
6157: PUSH
6158: LD_INT 4
6160: ARRAY
6161: PUSH
6162: LD_INT 0
6164: DOUBLE
6165: EQUAL
6166: IFTRUE 6176
6168: LD_INT 1
6170: DOUBLE
6171: EQUAL
6172: IFTRUE 6176
6174: GO 6187
6176: POP
// p = 100 ; b_armoury , b_barracks , b_fort :
6177: LD_ADDR_VAR 0 5
6181: PUSH
6182: LD_INT 100
6184: ST_TO_ADDR
6185: GO 6506
6187: LD_INT 4
6189: DOUBLE
6190: EQUAL
6191: IFTRUE 6207
6193: LD_INT 5
6195: DOUBLE
6196: EQUAL
6197: IFTRUE 6207
6199: LD_INT 35
6201: DOUBLE
6202: EQUAL
6203: IFTRUE 6207
6205: GO 6218
6207: POP
// p = 99 ; b_solar_power , b_oil_power , b_siberite_power :
6208: LD_ADDR_VAR 0 5
6212: PUSH
6213: LD_INT 99
6215: ST_TO_ADDR
6216: GO 6506
6218: LD_INT 27
6220: DOUBLE
6221: EQUAL
6222: IFTRUE 6238
6224: LD_INT 26
6226: DOUBLE
6227: EQUAL
6228: IFTRUE 6238
6230: LD_INT 28
6232: DOUBLE
6233: EQUAL
6234: IFTRUE 6238
6236: GO 6249
6238: POP
// p = 98 ; b_breastwork :
6239: LD_ADDR_VAR 0 5
6243: PUSH
6244: LD_INT 98
6246: ST_TO_ADDR
6247: GO 6506
6249: LD_INT 31
6251: DOUBLE
6252: EQUAL
6253: IFTRUE 6257
6255: GO 6268
6257: POP
// p = 97 ; b_factory , b_workshop :
6258: LD_ADDR_VAR 0 5
6262: PUSH
6263: LD_INT 97
6265: ST_TO_ADDR
6266: GO 6506
6268: LD_INT 3
6270: DOUBLE
6271: EQUAL
6272: IFTRUE 6282
6274: LD_INT 2
6276: DOUBLE
6277: EQUAL
6278: IFTRUE 6282
6280: GO 6293
6282: 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 :
6283: LD_ADDR_VAR 0 5
6287: PUSH
6288: LD_INT 96
6290: ST_TO_ADDR
6291: GO 6506
6293: LD_INT 17
6295: DOUBLE
6296: EQUAL
6297: IFTRUE 6349
6299: LD_INT 19
6301: DOUBLE
6302: EQUAL
6303: IFTRUE 6349
6305: LD_INT 25
6307: DOUBLE
6308: EQUAL
6309: IFTRUE 6349
6311: LD_INT 24
6313: DOUBLE
6314: EQUAL
6315: IFTRUE 6349
6317: LD_INT 20
6319: DOUBLE
6320: EQUAL
6321: IFTRUE 6349
6323: LD_INT 18
6325: DOUBLE
6326: EQUAL
6327: IFTRUE 6349
6329: LD_INT 21
6331: DOUBLE
6332: EQUAL
6333: IFTRUE 6349
6335: LD_INT 16
6337: DOUBLE
6338: EQUAL
6339: IFTRUE 6349
6341: LD_INT 23
6343: DOUBLE
6344: EQUAL
6345: IFTRUE 6349
6347: GO 6360
6349: POP
// p = 95 ; b_bunker :
6350: LD_ADDR_VAR 0 5
6354: PUSH
6355: LD_INT 95
6357: ST_TO_ADDR
6358: GO 6506
6360: LD_INT 32
6362: DOUBLE
6363: EQUAL
6364: IFTRUE 6368
6366: GO 6379
6368: POP
// p = 94 ; b_control_tower :
6369: LD_ADDR_VAR 0 5
6373: PUSH
6374: LD_INT 94
6376: ST_TO_ADDR
6377: GO 6506
6379: LD_INT 36
6381: DOUBLE
6382: EQUAL
6383: IFTRUE 6387
6385: GO 6398
6387: POP
// p = 93 ; b_turret :
6388: LD_ADDR_VAR 0 5
6392: PUSH
6393: LD_INT 93
6395: ST_TO_ADDR
6396: GO 6506
6398: LD_INT 33
6400: DOUBLE
6401: EQUAL
6402: IFTRUE 6406
6404: GO 6417
6406: POP
// p = 92 ; b_lab , b_lab_half , b_lab_full :
6407: LD_ADDR_VAR 0 5
6411: PUSH
6412: LD_INT 92
6414: ST_TO_ADDR
6415: GO 6506
6417: LD_INT 6
6419: DOUBLE
6420: EQUAL
6421: IFTRUE 6437
6423: LD_INT 7
6425: DOUBLE
6426: EQUAL
6427: IFTRUE 6437
6429: LD_INT 8
6431: DOUBLE
6432: EQUAL
6433: IFTRUE 6437
6435: GO 6448
6437: POP
// p = 91 ; b_teleport :
6438: LD_ADDR_VAR 0 5
6442: PUSH
6443: LD_INT 91
6445: ST_TO_ADDR
6446: GO 6506
6448: LD_INT 34
6450: DOUBLE
6451: EQUAL
6452: IFTRUE 6456
6454: GO 6467
6456: POP
// p = 90 ; b_siberite_mine :
6457: LD_ADDR_VAR 0 5
6461: PUSH
6462: LD_INT 90
6464: ST_TO_ADDR
6465: GO 6506
6467: LD_INT 30
6469: DOUBLE
6470: EQUAL
6471: IFTRUE 6475
6473: GO 6486
6475: POP
// p = 89 ; b_oil_mine :
6476: LD_ADDR_VAR 0 5
6480: PUSH
6481: LD_INT 89
6483: ST_TO_ADDR
6484: GO 6506
6486: LD_INT 29
6488: DOUBLE
6489: EQUAL
6490: IFTRUE 6494
6492: GO 6505
6494: POP
// p = 88 ; end ;
6495: LD_ADDR_VAR 0 5
6499: PUSH
6500: LD_INT 88
6502: ST_TO_ADDR
6503: GO 6506
6505: POP
// temp_list = temp_list ^ p ;
6506: LD_ADDR_VAR 0 4
6510: PUSH
6511: LD_VAR 0 4
6515: PUSH
6516: LD_VAR 0 5
6520: ADD
6521: ST_TO_ADDR
// end ;
6522: GO 6150
6524: POP
6525: POP
// temp_list = SortListByListDesc ( ai_buildings_locations [ base ] , temp_list ) ;
6526: LD_ADDR_VAR 0 4
6530: PUSH
6531: LD_EXP 27
6535: PUSH
6536: LD_VAR 0 1
6540: ARRAY
6541: PPUSH
6542: LD_VAR 0 4
6546: PPUSH
6547: CALL_OW 77
6551: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list ) ;
6552: LD_ADDR_EXP 27
6556: PUSH
6557: LD_EXP 27
6561: PPUSH
6562: LD_VAR 0 1
6566: PPUSH
6567: LD_VAR 0 4
6571: PPUSH
6572: CALL_OW 1
6576: ST_TO_ADDR
// end ;
6577: LD_VAR 0 2
6581: RET
// function PrepareComputerSides ; var i , temp_list , side , base , max , num , temp_list_2 , temp_list_3 , j , dir , other_guard ; begin
6582: LD_INT 0
6584: PPUSH
6585: PPUSH
6586: PPUSH
6587: PPUSH
6588: PPUSH
6589: PPUSH
6590: PPUSH
6591: PPUSH
6592: PPUSH
6593: PPUSH
6594: PPUSH
6595: PPUSH
// side = russians ;
6596: LD_ADDR_VAR 0 4
6600: PUSH
6601: LD_EXP 3
6605: ST_TO_ADDR
// for base in ai_bases do
6606: LD_ADDR_VAR 0 5
6610: PUSH
6611: LD_EXP 49
6615: PUSH
6616: FOR_IN
6617: IFFALSE 7098
// begin InitUc ;
6619: CALL_OW 18
// InitHc ;
6623: CALL_OW 19
// uc_side = side ;
6627: LD_ADDR_OWVAR 20
6631: PUSH
6632: LD_VAR 0 4
6636: ST_TO_ADDR
// case side of russians :
6637: LD_VAR 0 4
6641: PUSH
6642: LD_EXP 3
6646: DOUBLE
6647: EQUAL
6648: IFTRUE 6652
6650: GO 6663
6652: POP
// uc_nation = nation_russian ; end ;
6653: LD_ADDR_OWVAR 21
6657: PUSH
6658: LD_INT 3
6660: ST_TO_ADDR
6661: GO 6664
6663: POP
// temp_list = CreateUnitsWithClass ( 5 , class_soldier , false ,  , side ) ;
6664: LD_ADDR_VAR 0 3
6668: PUSH
6669: LD_INT 5
6671: PPUSH
6672: LD_INT 1
6674: PPUSH
6675: LD_INT 0
6677: PPUSH
6678: LD_STRING 
6680: PPUSH
6681: LD_VAR 0 4
6685: PPUSH
6686: CALL 7656 0 5
6690: ST_TO_ADDR
// if difficulty > 1 then
6691: LD_OWVAR 67
6695: PUSH
6696: LD_INT 1
6698: GREATER
6699: IFFALSE 6740
// temp_list = temp_list ^ CreateUnitsWithClass ( difficulty - 1 , class_bazooker , false ,  , side ) ;
6701: LD_ADDR_VAR 0 3
6705: PUSH
6706: LD_VAR 0 3
6710: PUSH
6711: LD_OWVAR 67
6715: PUSH
6716: LD_INT 1
6718: MINUS
6719: PPUSH
6720: LD_INT 9
6722: PPUSH
6723: LD_INT 0
6725: PPUSH
6726: LD_STRING 
6728: PPUSH
6729: LD_VAR 0 4
6733: PPUSH
6734: CALL 7656 0 5
6738: ADD
6739: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , base , temp_list ) ;
6740: LD_ADDR_EXP 17
6744: PUSH
6745: LD_EXP 17
6749: PPUSH
6750: LD_VAR 0 5
6754: PPUSH
6755: LD_VAR 0 3
6759: PPUSH
6760: CALL_OW 1
6764: ST_TO_ADDR
// ai_engineers = Replace ( ai_engineers , base , CreateUnitsWithClass ( [ 1 , 2 , 2 ] [ difficulty ] , class_engineer , false ,  , side ) ) ;
6765: LD_ADDR_EXP 18
6769: PUSH
6770: LD_EXP 18
6774: PPUSH
6775: LD_VAR 0 5
6779: PPUSH
6780: LD_INT 1
6782: PUSH
6783: LD_INT 2
6785: PUSH
6786: LD_INT 2
6788: PUSH
6789: EMPTY
6790: LIST
6791: LIST
6792: LIST
6793: PUSH
6794: LD_OWVAR 67
6798: ARRAY
6799: PPUSH
6800: LD_INT 2
6802: PPUSH
6803: LD_INT 0
6805: PPUSH
6806: LD_STRING 
6808: PPUSH
6809: LD_VAR 0 4
6813: PPUSH
6814: CALL 7656 0 5
6818: PPUSH
6819: CALL_OW 1
6823: ST_TO_ADDR
// ai_apemen_engineers = Replace ( ai_apemen_engineers , base , CreateApemenWithClass ( [ 1 , 1 , 2 ] [ difficulty ] , class_apeman_engineer ) ) ;
6824: LD_ADDR_EXP 53
6828: PUSH
6829: LD_EXP 53
6833: PPUSH
6834: LD_VAR 0 5
6838: PPUSH
6839: LD_INT 1
6841: PUSH
6842: LD_INT 1
6844: PUSH
6845: LD_INT 2
6847: PUSH
6848: EMPTY
6849: LIST
6850: LIST
6851: LIST
6852: PUSH
6853: LD_OWVAR 67
6857: ARRAY
6858: PPUSH
6859: LD_INT 16
6861: PPUSH
6862: CALL 7823 0 2
6866: PPUSH
6867: CALL_OW 1
6871: ST_TO_ADDR
// temp_list = [ ] ;
6872: LD_ADDR_VAR 0 3
6876: PUSH
6877: EMPTY
6878: ST_TO_ADDR
// for i in ai_engineers [ base ] do
6879: LD_ADDR_VAR 0 2
6883: PUSH
6884: LD_EXP 18
6888: PUSH
6889: LD_VAR 0 5
6893: ARRAY
6894: PUSH
6895: FOR_IN
6896: IFFALSE 6924
// temp_list = temp_list ^ GetSkill ( i , skill_engineering ) ;
6898: LD_ADDR_VAR 0 3
6902: PUSH
6903: LD_VAR 0 3
6907: PUSH
6908: LD_VAR 0 2
6912: PPUSH
6913: LD_INT 2
6915: PPUSH
6916: CALL_OW 259
6920: ADD
6921: ST_TO_ADDR
6922: GO 6895
6924: POP
6925: POP
// max = BestFromListByList ( temp_list , temp_list ) ;
6926: LD_ADDR_VAR 0 6
6930: PUSH
6931: LD_VAR 0 3
6935: PPUSH
6936: LD_VAR 0 3
6940: PPUSH
6941: CALL_OW 79
6945: ST_TO_ADDR
// for i in ai_all_buildings [ base ] do
6946: LD_ADDR_VAR 0 2
6950: PUSH
6951: LD_EXP 34
6955: PUSH
6956: LD_VAR 0 5
6960: ARRAY
6961: PUSH
6962: FOR_IN
6963: IFFALSE 6981
// SetBLevel ( i , max ) ;
6965: LD_VAR 0 2
6969: PPUSH
6970: LD_VAR 0 6
6974: PPUSH
6975: CALL_OW 241
6979: GO 6962
6981: POP
6982: POP
// ai_mechanics_defend = Replace ( ai_mechanics_defend , base , CreateUnitsWithClass ( difficulty + ( difficulty - 1 ) , class_mechanic , false ,  , side ) ) ;
6983: LD_ADDR_EXP 19
6987: PUSH
6988: LD_EXP 19
6992: PPUSH
6993: LD_VAR 0 5
6997: PPUSH
6998: LD_OWVAR 67
7002: PUSH
7003: LD_OWVAR 67
7007: PUSH
7008: LD_INT 1
7010: MINUS
7011: PLUS
7012: PPUSH
7013: LD_INT 3
7015: PPUSH
7016: LD_INT 0
7018: PPUSH
7019: LD_STRING 
7021: PPUSH
7022: LD_VAR 0 4
7026: PPUSH
7027: CALL 7656 0 5
7031: PPUSH
7032: CALL_OW 1
7036: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , base , CreateUnitsWithClass ( [ 2 , 2 , 3 ] [ difficulty ] , class_scientistic , false ,  , side ) ) ;
7037: LD_ADDR_EXP 21
7041: PUSH
7042: LD_EXP 21
7046: PPUSH
7047: LD_VAR 0 5
7051: PPUSH
7052: LD_INT 2
7054: PUSH
7055: LD_INT 2
7057: PUSH
7058: LD_INT 3
7060: PUSH
7061: EMPTY
7062: LIST
7063: LIST
7064: LIST
7065: PUSH
7066: LD_OWVAR 67
7070: ARRAY
7071: PPUSH
7072: LD_INT 4
7074: PPUSH
7075: LD_INT 0
7077: PPUSH
7078: LD_STRING 
7080: PPUSH
7081: LD_VAR 0 4
7085: PPUSH
7086: CALL 7656 0 5
7090: PPUSH
7091: CALL_OW 1
7095: ST_TO_ADDR
// end ;
7096: GO 6616
7098: POP
7099: POP
// Gossudarov = NewCharacter ( Gossudarov ) ;
7100: LD_ADDR_EXP 13
7104: PUSH
7105: LD_STRING Gossudarov
7107: PPUSH
7108: CALL_OW 25
7112: ST_TO_ADDR
// temp_list = ai_scientists [ 1 ] ^ Gossudarov ;
7113: LD_ADDR_VAR 0 3
7117: PUSH
7118: LD_EXP 21
7122: PUSH
7123: LD_INT 1
7125: ARRAY
7126: PUSH
7127: LD_EXP 13
7131: ADD
7132: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , 1 , temp_list ) ;
7133: LD_ADDR_EXP 21
7137: PUSH
7138: LD_EXP 21
7142: PPUSH
7143: LD_INT 1
7145: PPUSH
7146: LD_VAR 0 3
7150: PPUSH
7151: CALL_OW 1
7155: ST_TO_ADDR
// vc_chassis = ru_medium_tracked ;
7156: LD_ADDR_OWVAR 37
7160: PUSH
7161: LD_INT 22
7163: ST_TO_ADDR
// vc_engine = engine_combustion ;
7164: LD_ADDR_OWVAR 39
7168: PUSH
7169: LD_INT 1
7171: ST_TO_ADDR
// vc_control = control_manual ;
7172: LD_ADDR_OWVAR 38
7176: PUSH
7177: LD_INT 1
7179: ST_TO_ADDR
// vc_weapon = ru_cargo_bay ;
7180: LD_ADDR_OWVAR 40
7184: PUSH
7185: LD_INT 51
7187: ST_TO_ADDR
// escape_cargo_bay = CreateVehicle ;
7188: LD_ADDR_EXP 64
7192: PUSH
7193: CALL_OW 45
7197: ST_TO_ADDR
// SetDir ( escape_cargo_bay , 3 ) ;
7198: LD_EXP 64
7202: PPUSH
7203: LD_INT 3
7205: PPUSH
7206: CALL_OW 233
// PlaceUnitXY ( escape_cargo_bay , 187 , 87 , false ) ;
7210: LD_EXP 64
7214: PPUSH
7215: LD_INT 187
7217: PPUSH
7218: LD_INT 87
7220: PPUSH
7221: LD_INT 0
7223: PPUSH
7224: CALL_OW 48
// if difficulty > 1 then
7228: LD_OWVAR 67
7232: PUSH
7233: LD_INT 1
7235: GREATER
7236: IFFALSE 7312
// begin if Rand ( 1 , 2 ) = 1 then
7238: LD_INT 1
7240: PPUSH
7241: LD_INT 2
7243: PPUSH
7244: CALL_OW 12
7248: PUSH
7249: LD_INT 1
7251: EQUAL
7252: IFFALSE 7264
// vc_weapon = ru_gun else
7254: LD_ADDR_OWVAR 40
7258: PUSH
7259: LD_INT 44
7261: ST_TO_ADDR
7262: GO 7272
// vc_weapon = ru_heavy_machine_gun ;
7264: LD_ADDR_OWVAR 40
7268: PUSH
7269: LD_INT 42
7271: ST_TO_ADDR
// escort_veh_front = CreateVehicle ;
7272: LD_ADDR_EXP 91
7276: PUSH
7277: CALL_OW 45
7281: ST_TO_ADDR
// SetDir ( escort_veh_front , 5 ) ;
7282: LD_EXP 91
7286: PPUSH
7287: LD_INT 5
7289: PPUSH
7290: CALL_OW 233
// PlaceUnitXY ( escort_veh_front , 192 , 85 , false ) ;
7294: LD_EXP 91
7298: PPUSH
7299: LD_INT 192
7301: PPUSH
7302: LD_INT 85
7304: PPUSH
7305: LD_INT 0
7307: PPUSH
7308: CALL_OW 48
// end ; if difficulty = 3 then
7312: LD_OWVAR 67
7316: PUSH
7317: LD_INT 3
7319: EQUAL
7320: IFFALSE 7370
// begin vc_weapon = ru_gun ;
7322: LD_ADDR_OWVAR 40
7326: PUSH
7327: LD_INT 44
7329: ST_TO_ADDR
// escort_veh_rear = CreateVehicle ;
7330: LD_ADDR_EXP 92
7334: PUSH
7335: CALL_OW 45
7339: ST_TO_ADDR
// SetDir ( escort_veh_rear , 5 ) ;
7340: LD_EXP 92
7344: PPUSH
7345: LD_INT 5
7347: PPUSH
7348: CALL_OW 233
// PlaceUnitXY ( escort_veh_rear , 192 , 89 , false ) ;
7352: LD_EXP 92
7356: PPUSH
7357: LD_INT 192
7359: PPUSH
7360: LD_INT 89
7362: PPUSH
7363: LD_INT 0
7365: PPUSH
7366: CALL_OW 48
// end ; temp_list = [ ] ;
7370: LD_ADDR_VAR 0 3
7374: PUSH
7375: EMPTY
7376: ST_TO_ADDR
// for i = 1 to num_base_vehicles do
7377: LD_ADDR_VAR 0 2
7381: PUSH
7382: DOUBLE
7383: LD_INT 1
7385: DEC
7386: ST_TO_ADDR
7387: LD_EXP 90
7391: PUSH
7392: FOR_TO
7393: IFFALSE 7493
// begin uc_direction = Rand ( 0 , 5 ) ;
7395: LD_ADDR_OWVAR 24
7399: PUSH
7400: LD_INT 0
7402: PPUSH
7403: LD_INT 5
7405: PPUSH
7406: CALL_OW 12
7410: ST_TO_ADDR
// InitiateRussianVehicleVariables ;
7411: CALL 7999 0 0
// j = CreateVehicle ;
7415: LD_ADDR_VAR 0 10
7419: PUSH
7420: CALL_OW 45
7424: ST_TO_ADDR
// PlaceUnitXY ( j , ai_vehicle_pullback_hexes [ 1 ] [ i ] [ 1 ] , ai_vehicle_pullback_hexes [ 1 ] [ i ] [ 2 ] , false ) ;
7425: LD_VAR 0 10
7429: PPUSH
7430: LD_EXP 30
7434: PUSH
7435: LD_INT 1
7437: ARRAY
7438: PUSH
7439: LD_VAR 0 2
7443: ARRAY
7444: PUSH
7445: LD_INT 1
7447: ARRAY
7448: PPUSH
7449: LD_EXP 30
7453: PUSH
7454: LD_INT 1
7456: ARRAY
7457: PUSH
7458: LD_VAR 0 2
7462: ARRAY
7463: PUSH
7464: LD_INT 2
7466: ARRAY
7467: PPUSH
7468: LD_INT 0
7470: PPUSH
7471: CALL_OW 48
// temp_list = temp_list ^ j ;
7475: LD_ADDR_VAR 0 3
7479: PUSH
7480: LD_VAR 0 3
7484: PUSH
7485: LD_VAR 0 10
7489: ADD
7490: ST_TO_ADDR
// end ;
7491: GO 7392
7493: POP
7494: POP
// ai_vehicles_defend = Replace ( ai_vehicles_defend , 1 , temp_list ) ;
7495: LD_ADDR_EXP 28
7499: PUSH
7500: LD_EXP 28
7504: PPUSH
7505: LD_INT 1
7507: PPUSH
7508: LD_VAR 0 3
7512: PPUSH
7513: CALL_OW 1
7517: ST_TO_ADDR
// for base in ai_bases do
7518: LD_ADDR_VAR 0 5
7522: PUSH
7523: LD_EXP 49
7527: PUSH
7528: FOR_IN
7529: IFFALSE 7649
// for i in ai_soldiers [ base ] ^ ai_engineers [ base ] ^ ai_mechanics_defend [ base ] ^ ai_scientists [ base ] ^ ai_apemen_engineers [ base ] do
7531: LD_ADDR_VAR 0 2
7535: PUSH
7536: LD_EXP 17
7540: PUSH
7541: LD_VAR 0 5
7545: ARRAY
7546: PUSH
7547: LD_EXP 18
7551: PUSH
7552: LD_VAR 0 5
7556: ARRAY
7557: ADD
7558: PUSH
7559: LD_EXP 19
7563: PUSH
7564: LD_VAR 0 5
7568: ARRAY
7569: ADD
7570: PUSH
7571: LD_EXP 21
7575: PUSH
7576: LD_VAR 0 5
7580: ARRAY
7581: ADD
7582: PUSH
7583: LD_EXP 53
7587: PUSH
7588: LD_VAR 0 5
7592: ARRAY
7593: ADD
7594: PUSH
7595: FOR_IN
7596: IFFALSE 7645
// PlaceUnitXYR ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] , 7 , false ) ;
7598: LD_VAR 0 2
7602: PPUSH
7603: LD_EXP 31
7607: PUSH
7608: LD_VAR 0 5
7612: ARRAY
7613: PUSH
7614: LD_INT 1
7616: ARRAY
7617: PPUSH
7618: LD_EXP 31
7622: PUSH
7623: LD_VAR 0 5
7627: ARRAY
7628: PUSH
7629: LD_INT 2
7631: ARRAY
7632: PPUSH
7633: LD_INT 7
7635: PPUSH
7636: LD_INT 0
7638: PPUSH
7639: CALL_OW 50
7643: GO 7595
7645: POP
7646: POP
7647: GO 7528
7649: POP
7650: POP
// end ;
7651: LD_VAR 0 1
7655: RET
// export function CreateUnitsWithClass ( num_units , un_class , sex , name , side ) ; var i , overskill , temp_diffi ; begin
7656: LD_INT 0
7658: PPUSH
7659: PPUSH
7660: PPUSH
7661: PPUSH
// result = [ ] ;
7662: LD_ADDR_VAR 0 6
7666: PUSH
7667: EMPTY
7668: ST_TO_ADDR
// InitUc ;
7669: CALL_OW 18
// InitHc ;
7673: CALL_OW 19
// hc_name = name ;
7677: LD_ADDR_OWVAR 26
7681: PUSH
7682: LD_VAR 0 4
7686: ST_TO_ADDR
// uc_nation = nation_russian ;
7687: LD_ADDR_OWVAR 21
7691: PUSH
7692: LD_INT 3
7694: ST_TO_ADDR
// uc_side = side ;
7695: LD_ADDR_OWVAR 20
7699: PUSH
7700: LD_VAR 0 5
7704: ST_TO_ADDR
// overskill = difficulty + 4 ;
7705: LD_ADDR_VAR 0 8
7709: PUSH
7710: LD_OWVAR 67
7714: PUSH
7715: LD_INT 4
7717: PLUS
7718: ST_TO_ADDR
// for i = 1 to num_units do
7719: LD_ADDR_VAR 0 7
7723: PUSH
7724: DOUBLE
7725: LD_INT 1
7727: DEC
7728: ST_TO_ADDR
7729: LD_VAR 0 1
7733: PUSH
7734: FOR_TO
7735: IFFALSE 7816
// begin if Rand ( 1 , 3 ) = 1 then
7737: LD_INT 1
7739: PPUSH
7740: LD_INT 3
7742: PPUSH
7743: CALL_OW 12
7747: PUSH
7748: LD_INT 1
7750: EQUAL
7751: IFFALSE 7779
// PrepareHuman ( sex , un_class , - overskill + 1 ) else
7753: LD_VAR 0 3
7757: PPUSH
7758: LD_VAR 0 2
7762: PPUSH
7763: LD_VAR 0 8
7767: NEG
7768: PUSH
7769: LD_INT 1
7771: PLUS
7772: PPUSH
7773: CALL_OW 380
7777: GO 7798
// PrepareHuman ( sex , un_class , overskill ) ;
7779: LD_VAR 0 3
7783: PPUSH
7784: LD_VAR 0 2
7788: PPUSH
7789: LD_VAR 0 8
7793: PPUSH
7794: CALL_OW 380
// result = result ^ CreateHuman ;
7798: LD_ADDR_VAR 0 6
7802: PUSH
7803: LD_VAR 0 6
7807: PUSH
7808: CALL_OW 44
7812: ADD
7813: ST_TO_ADDR
// end ;
7814: GO 7734
7816: POP
7817: POP
// end ;
7818: LD_VAR 0 6
7822: RET
// export function CreateApemenWithClass ( num_units , un_class ) ; var i ; begin
7823: LD_INT 0
7825: PPUSH
7826: PPUSH
// result = [ ] ;
7827: LD_ADDR_VAR 0 3
7831: PUSH
7832: EMPTY
7833: ST_TO_ADDR
// InitUc ;
7834: CALL_OW 18
// InitHc ;
7838: CALL_OW 19
// uc_side = russians ;
7842: LD_ADDR_OWVAR 20
7846: PUSH
7847: LD_EXP 3
7851: ST_TO_ADDR
// uc_nation = nation_nature ;
7852: LD_ADDR_OWVAR 21
7856: PUSH
7857: LD_INT 0
7859: ST_TO_ADDR
// hc_class = un_class ;
7860: LD_ADDR_OWVAR 28
7864: PUSH
7865: LD_VAR 0 2
7869: ST_TO_ADDR
// for i = 1 to num_units do
7870: LD_ADDR_VAR 0 4
7874: PUSH
7875: DOUBLE
7876: LD_INT 1
7878: DEC
7879: ST_TO_ADDR
7880: LD_VAR 0 1
7884: PUSH
7885: FOR_TO
7886: IFFALSE 7992
// begin hc_attr = [ Rand ( 11 , 13 ) , Rand ( 10 , 11 ) ] ;
7888: LD_ADDR_OWVAR 29
7892: PUSH
7893: LD_INT 11
7895: PPUSH
7896: LD_INT 13
7898: PPUSH
7899: CALL_OW 12
7903: PUSH
7904: LD_INT 10
7906: PPUSH
7907: LD_INT 11
7909: PPUSH
7910: CALL_OW 12
7914: PUSH
7915: EMPTY
7916: LIST
7917: LIST
7918: ST_TO_ADDR
// hc_sex = Rand ( sex_male , sex_female ) ;
7919: LD_ADDR_OWVAR 27
7923: PUSH
7924: LD_INT 1
7926: PPUSH
7927: LD_INT 2
7929: PPUSH
7930: CALL_OW 12
7934: ST_TO_ADDR
// hc_skills = [ Rand ( 0 , 1 ) , Rand ( 0 , 1 ) , 0 , 0 ] ;
7935: LD_ADDR_OWVAR 31
7939: PUSH
7940: LD_INT 0
7942: PPUSH
7943: LD_INT 1
7945: PPUSH
7946: CALL_OW 12
7950: PUSH
7951: LD_INT 0
7953: PPUSH
7954: LD_INT 1
7956: PPUSH
7957: CALL_OW 12
7961: PUSH
7962: LD_INT 0
7964: PUSH
7965: LD_INT 0
7967: PUSH
7968: EMPTY
7969: LIST
7970: LIST
7971: LIST
7972: LIST
7973: ST_TO_ADDR
// result = result ^ CreateHuman ;
7974: LD_ADDR_VAR 0 3
7978: PUSH
7979: LD_VAR 0 3
7983: PUSH
7984: CALL_OW 44
7988: ADD
7989: ST_TO_ADDR
// end ;
7990: GO 7885
7992: POP
7993: POP
// end ;
7994: LD_VAR 0 3
7998: RET
// export function InitiateRussianVehicleVariables ; begin
7999: LD_INT 0
8001: PPUSH
// InitUc ;
8002: CALL_OW 18
// InitVc ;
8006: CALL_OW 20
// uc_side = russians ;
8010: LD_ADDR_OWVAR 20
8014: PUSH
8015: LD_EXP 3
8019: ST_TO_ADDR
// uc_nation = nation_russian ;
8020: LD_ADDR_OWVAR 21
8024: PUSH
8025: LD_INT 3
8027: ST_TO_ADDR
// vc_engine = engine_combustion ;
8028: LD_ADDR_OWVAR 39
8032: PUSH
8033: LD_INT 1
8035: ST_TO_ADDR
// vc_control = control_manual ;
8036: LD_ADDR_OWVAR 38
8040: PUSH
8041: LD_INT 1
8043: ST_TO_ADDR
// vc_chassis = - 1 ;
8044: LD_ADDR_OWVAR 37
8048: PUSH
8049: LD_INT 1
8051: NEG
8052: ST_TO_ADDR
// case Rand ( 1 , 3 ) of 1 :
8053: LD_INT 1
8055: PPUSH
8056: LD_INT 3
8058: PPUSH
8059: CALL_OW 12
8063: PUSH
8064: LD_INT 1
8066: DOUBLE
8067: EQUAL
8068: IFTRUE 8072
8070: GO 8115
8072: POP
// begin if Rand ( 1 , 1 + difficulty ) = 1 then
8073: LD_INT 1
8075: PPUSH
8076: LD_INT 1
8078: PUSH
8079: LD_OWVAR 67
8083: PLUS
8084: PPUSH
8085: CALL_OW 12
8089: PUSH
8090: LD_INT 1
8092: EQUAL
8093: IFFALSE 8105
// vc_weapon = ru_heavy_machine_gun else
8095: LD_ADDR_OWVAR 40
8099: PUSH
8100: LD_INT 42
8102: ST_TO_ADDR
8103: GO 8113
// vc_weapon = ru_gatling_gun ;
8105: LD_ADDR_OWVAR 40
8109: PUSH
8110: LD_INT 43
8112: ST_TO_ADDR
// end ; 2 :
8113: GO 8200
8115: LD_INT 2
8117: DOUBLE
8118: EQUAL
8119: IFTRUE 8123
8121: GO 8180
8123: POP
// begin if difficulty > 1 and Rand ( difficulty , 4 ) = 4 then
8124: LD_OWVAR 67
8128: PUSH
8129: LD_INT 1
8131: GREATER
8132: PUSH
8133: LD_OWVAR 67
8137: PPUSH
8138: LD_INT 4
8140: PPUSH
8141: CALL_OW 12
8145: PUSH
8146: LD_INT 4
8148: EQUAL
8149: AND
8150: IFFALSE 8170
// begin vc_weapon = ru_heavy_gun ;
8152: LD_ADDR_OWVAR 40
8156: PUSH
8157: LD_INT 46
8159: ST_TO_ADDR
// vc_chassis = ru_heavy_tracked ;
8160: LD_ADDR_OWVAR 37
8164: PUSH
8165: LD_INT 24
8167: ST_TO_ADDR
// end else
8168: GO 8178
// vc_weapon = ru_gun ;
8170: LD_ADDR_OWVAR 40
8174: PUSH
8175: LD_INT 44
8177: ST_TO_ADDR
// end ; 3 :
8178: GO 8200
8180: LD_INT 3
8182: DOUBLE
8183: EQUAL
8184: IFTRUE 8188
8186: GO 8199
8188: POP
// begin vc_weapon = ru_rocket_launcher ;
8189: LD_ADDR_OWVAR 40
8193: PUSH
8194: LD_INT 45
8196: ST_TO_ADDR
// end ; end ;
8197: GO 8200
8199: POP
// if vc_chassis = - 1 then
8200: LD_OWVAR 37
8204: PUSH
8205: LD_INT 1
8207: NEG
8208: EQUAL
8209: IFFALSE 8272
// if difficulty > 1 and Rand ( 1 , 5 ) <= [ 3 , 4 ] [ difficulty - 1 ] then
8211: LD_OWVAR 67
8215: PUSH
8216: LD_INT 1
8218: GREATER
8219: PUSH
8220: LD_INT 1
8222: PPUSH
8223: LD_INT 5
8225: PPUSH
8226: CALL_OW 12
8230: PUSH
8231: LD_INT 3
8233: PUSH
8234: LD_INT 4
8236: PUSH
8237: EMPTY
8238: LIST
8239: LIST
8240: PUSH
8241: LD_OWVAR 67
8245: PUSH
8246: LD_INT 1
8248: MINUS
8249: ARRAY
8250: LESSEQUAL
8251: AND
8252: IFFALSE 8264
// vc_chassis = ru_heavy_tracked else
8254: LD_ADDR_OWVAR 37
8258: PUSH
8259: LD_INT 24
8261: ST_TO_ADDR
8262: GO 8272
// vc_chassis = ru_medium_tracked ;
8264: LD_ADDR_OWVAR 37
8268: PUSH
8269: LD_INT 22
8271: ST_TO_ADDR
// end ;
8272: LD_VAR 0 1
8276: RET
// function Action ; var i , units_list ; begin
8277: LD_INT 0
8279: PPUSH
8280: PPUSH
8281: PPUSH
// for i in FilterAllUnits ( [ f_side , nature ] ) do
8282: LD_ADDR_VAR 0 2
8286: PUSH
8287: LD_INT 22
8289: PUSH
8290: LD_EXP 4
8294: PUSH
8295: EMPTY
8296: LIST
8297: LIST
8298: PPUSH
8299: CALL_OW 69
8303: PUSH
8304: FOR_IN
8305: IFFALSE 8318
// ComStand ( i ) ;
8307: LD_VAR 0 2
8311: PPUSH
8312: CALL_OW 165
8316: GO 8304
8318: POP
8319: POP
// if LoadVariable ( Extra_documents_stolen_09 , false ) then
8320: LD_STRING Extra_documents_stolen_09
8322: PPUSH
8323: LD_INT 0
8325: PPUSH
8326: CALL_OW 30
8330: IFFALSE 8344
// RevealFogArea ( you , ru_base_area ) ;
8332: LD_EXP 2
8336: PPUSH
8337: LD_INT 1
8339: PPUSH
8340: CALL_OW 332
// units_list = [ Heike , Oswald , Dwayne , Kurt , Gonzo ] diff 0 ;
8344: LD_ADDR_VAR 0 3
8348: PUSH
8349: LD_EXP 7
8353: PUSH
8354: LD_EXP 9
8358: PUSH
8359: LD_EXP 8
8363: PUSH
8364: LD_EXP 10
8368: PUSH
8369: LD_EXP 11
8373: PUSH
8374: EMPTY
8375: LIST
8376: LIST
8377: LIST
8378: LIST
8379: LIST
8380: PUSH
8381: LD_INT 0
8383: DIFF
8384: ST_TO_ADDR
// CenterNowOnXY ( 21 , 36 ) ;
8385: LD_INT 21
8387: PPUSH
8388: LD_INT 36
8390: PPUSH
8391: CALL_OW 86
// InGameOn ;
8395: CALL_OW 8
// ComMoveXY ( Heike , 36 , 40 ) ;
8399: LD_EXP 7
8403: PPUSH
8404: LD_INT 36
8406: PPUSH
8407: LD_INT 40
8409: PPUSH
8410: CALL_OW 111
// for i in units_list diff Heike do
8414: LD_ADDR_VAR 0 2
8418: PUSH
8419: LD_VAR 0 3
8423: PUSH
8424: LD_EXP 7
8428: DIFF
8429: PUSH
8430: FOR_IN
8431: IFFALSE 8466
// ComMoveXY ( i , Rand ( 33 , 35 ) , Rand ( 39 , 41 ) ) ;
8433: LD_VAR 0 2
8437: PPUSH
8438: LD_INT 33
8440: PPUSH
8441: LD_INT 35
8443: PPUSH
8444: CALL_OW 12
8448: PPUSH
8449: LD_INT 39
8451: PPUSH
8452: LD_INT 41
8454: PPUSH
8455: CALL_OW 12
8459: PPUSH
8460: CALL_OW 111
8464: GO 8430
8466: POP
8467: POP
// for i in units_list do
8468: LD_ADDR_VAR 0 2
8472: PUSH
8473: LD_VAR 0 3
8477: PUSH
8478: FOR_IN
8479: IFFALSE 8492
// AddComHold ( i ) ;
8481: LD_VAR 0 2
8485: PPUSH
8486: CALL_OW 200
8490: GO 8478
8492: POP
8493: POP
// if not oswald_is_substitute then
8494: LD_EXP 62
8498: NOT
8499: IFFALSE 8527
// begin Say ( Oswald , D1-Os-1 ) ;
8501: LD_EXP 9
8505: PPUSH
8506: LD_STRING D1-Os-1
8508: PPUSH
8509: CALL_OW 88
// Say ( Dwayne , D1-Dw-1a ) ;
8513: LD_EXP 8
8517: PPUSH
8518: LD_STRING D1-Dw-1a
8520: PPUSH
8521: CALL_OW 88
// end else
8525: GO 8551
// begin Say ( Oswald , D1-Os_sub-1 ) ;
8527: LD_EXP 9
8531: PPUSH
8532: LD_STRING D1-Os_sub-1
8534: PPUSH
8535: CALL_OW 88
// Say ( Dwayne , D1-Dw-1b ) ;
8539: LD_EXP 8
8543: PPUSH
8544: LD_STRING D1-Dw-1b
8546: PPUSH
8547: CALL_OW 88
// end ; Say ( Heike , D1-H-1 ) ;
8551: LD_EXP 7
8555: PPUSH
8556: LD_STRING D1-H-1
8558: PPUSH
8559: CALL_OW 88
// if not oswald_is_substitute then
8563: LD_EXP 62
8567: NOT
8568: IFFALSE 8584
// Say ( Oswald , D1-Os-2 ) else
8570: LD_EXP 9
8574: PPUSH
8575: LD_STRING D1-Os-2
8577: PPUSH
8578: CALL_OW 88
8582: GO 8596
// Say ( Oswald , D1-Os_sub-2 ) ;
8584: LD_EXP 9
8588: PPUSH
8589: LD_STRING D1-Os_sub-2
8591: PPUSH
8592: CALL_OW 88
// if not kurt_is_substitute then
8596: LD_EXP 63
8600: NOT
8601: IFFALSE 8617
// Say ( Kurt , D1-Ku-1 ) else
8603: LD_EXP 10
8607: PPUSH
8608: LD_STRING D1-Ku-1
8610: PPUSH
8611: CALL_OW 88
8615: GO 8629
// Say ( Kurt , D1-Ku_sub-1 ) ;
8617: LD_EXP 10
8621: PPUSH
8622: LD_STRING D1-Ku_sub-1
8624: PPUSH
8625: CALL_OW 88
// if ( units_list diff [ Heike , Gonzo ] ) > 0 then
8629: LD_VAR 0 3
8633: PUSH
8634: LD_EXP 7
8638: PUSH
8639: LD_EXP 11
8643: PUSH
8644: EMPTY
8645: LIST
8646: LIST
8647: DIFF
8648: PUSH
8649: LD_INT 0
8651: GREATER
8652: IFFALSE 8668
// Say ( Heike , D1-H-2a ) else
8654: LD_EXP 7
8658: PPUSH
8659: LD_STRING D1-H-2a
8661: PPUSH
8662: CALL_OW 88
8666: GO 8680
// Say ( Heike , D1-H-2b ) ;
8668: LD_EXP 7
8672: PPUSH
8673: LD_STRING D1-H-2b
8675: PPUSH
8676: CALL_OW 88
// if not oswald_is_substitute then
8680: LD_EXP 62
8684: NOT
8685: IFFALSE 8701
// Say ( Oswald , D1-Os-3 ) else
8687: LD_EXP 9
8691: PPUSH
8692: LD_STRING D1-Os-3
8694: PPUSH
8695: CALL_OW 88
8699: GO 8713
// Say ( Oswald , D1-Os_sub-3 ) ;
8701: LD_EXP 9
8705: PPUSH
8706: LD_STRING D1-Os_sub-3
8708: PPUSH
8709: CALL_OW 88
// InGameOff ;
8713: CALL_OW 9
// for i in FilterAllUnits ( [ f_side , nature ] ) do
8717: LD_ADDR_VAR 0 2
8721: PUSH
8722: LD_INT 22
8724: PUSH
8725: LD_EXP 4
8729: PUSH
8730: EMPTY
8731: LIST
8732: LIST
8733: PPUSH
8734: CALL_OW 69
8738: PUSH
8739: FOR_IN
8740: IFFALSE 8753
// ComFree ( i ) ;
8742: LD_VAR 0 2
8746: PPUSH
8747: CALL_OW 139
8751: GO 8739
8753: POP
8754: POP
// for i in units_list do
8755: LD_ADDR_VAR 0 2
8759: PUSH
8760: LD_VAR 0 3
8764: PUSH
8765: FOR_IN
8766: IFFALSE 8779
// ComFree ( i ) ;
8768: LD_VAR 0 2
8772: PPUSH
8773: CALL_OW 139
8777: GO 8765
8779: POP
8780: POP
// wait ( 0 0$0.2 ) ;
8781: LD_INT 7
8783: PPUSH
8784: CALL_OW 67
// SaveForQuickRestart ;
8788: CALL_OW 22
// wait ( 0 0$0.2 ) ;
8792: LD_INT 7
8794: PPUSH
8795: CALL_OW 67
// ChangeMissionObjectives ( M1 ) ;
8799: LD_STRING M1
8801: PPUSH
8802: CALL_OW 337
// end ; end_of_file
8806: LD_VAR 0 1
8810: RET
// every 0 0$10 do var base ;
8811: GO 8813
8813: DISABLE
8814: LD_INT 0
8816: PPUSH
// begin if IsOk ( ai_depot [ 1 ] ) and GetSide ( ai_depot [ 1 ] ) = russians then
8817: LD_EXP 23
8821: PUSH
8822: LD_INT 1
8824: ARRAY
8825: PPUSH
8826: CALL_OW 302
8830: PUSH
8831: LD_EXP 23
8835: PUSH
8836: LD_INT 1
8838: ARRAY
8839: PPUSH
8840: CALL_OW 255
8844: PUSH
8845: LD_EXP 3
8849: EQUAL
8850: AND
8851: IFFALSE 8917
// begin base = GetBase ( ai_depot [ 1 ] ) ;
8853: LD_ADDR_VAR 0 1
8857: PUSH
8858: LD_EXP 23
8862: PUSH
8863: LD_INT 1
8865: ARRAY
8866: PPUSH
8867: CALL_OW 274
8871: ST_TO_ADDR
// SetResourceType ( base , mat_cans , 300 ) ;
8872: LD_VAR 0 1
8876: PPUSH
8877: LD_INT 1
8879: PPUSH
8880: LD_INT 300
8882: PPUSH
8883: CALL_OW 277
// SetResourceType ( base , mat_oil , 300 ) ;
8887: LD_VAR 0 1
8891: PPUSH
8892: LD_INT 2
8894: PPUSH
8895: LD_INT 300
8897: PPUSH
8898: CALL_OW 277
// SetResourceType ( base , mat_siberit , 0 ) ;
8902: LD_VAR 0 1
8906: PPUSH
8907: LD_INT 3
8909: PPUSH
8910: LD_INT 0
8912: PPUSH
8913: CALL_OW 277
// end ; enable ;
8917: ENABLE
// end ;
8918: PPOPN 1
8920: END
// on UnitDestroyed ( un ) do var side , temp_list , base ;
8921: LD_INT 0
8923: PPUSH
8924: PPUSH
8925: PPUSH
// begin if un = Heike then
8926: LD_VAR 0 1
8930: PUSH
8931: LD_EXP 7
8935: EQUAL
8936: IFFALSE 8960
// begin ExclusiveOn ;
8938: CALL_OW 4
// Wait ( 0 0$1 ) ;
8942: LD_INT 35
8944: PPUSH
8945: CALL_OW 67
// YouLost ( HeikeDead ) ;
8949: LD_STRING HeikeDead
8951: PPUSH
8952: CALL_OW 104
// ExclusiveOff ;
8956: CALL_OW 5
// end ; traitors_humans = traitors_humans diff un ;
8960: LD_ADDR_EXP 68
8964: PUSH
8965: LD_EXP 68
8969: PUSH
8970: LD_VAR 0 1
8974: DIFF
8975: ST_TO_ADDR
// traitors_vehicles = traitors_vehicles diff un ;
8976: LD_ADDR_EXP 69
8980: PUSH
8981: LD_EXP 69
8985: PUSH
8986: LD_VAR 0 1
8990: DIFF
8991: ST_TO_ADDR
// russian_prisoners = russian_prisoners diff un ;
8992: LD_ADDR_EXP 80
8996: PUSH
8997: LD_EXP 80
9001: PUSH
9002: LD_VAR 0 1
9006: DIFF
9007: ST_TO_ADDR
// for base in ai_bases do
9008: LD_ADDR_VAR 0 4
9012: PUSH
9013: LD_EXP 49
9017: PUSH
9018: FOR_IN
9019: IFFALSE 9070
// begin temp_list = ai_captured_buildings [ base ] diff un ;
9021: LD_ADDR_VAR 0 3
9025: PUSH
9026: LD_EXP 61
9030: PUSH
9031: LD_VAR 0 4
9035: ARRAY
9036: PUSH
9037: LD_VAR 0 1
9041: DIFF
9042: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
9043: LD_ADDR_EXP 61
9047: PUSH
9048: LD_EXP 61
9052: PPUSH
9053: LD_VAR 0 4
9057: PPUSH
9058: LD_VAR 0 3
9062: PPUSH
9063: CALL_OW 1
9067: ST_TO_ADDR
// end ;
9068: GO 9018
9070: POP
9071: POP
// side = GetSide ( un ) ;
9072: LD_ADDR_VAR 0 2
9076: PUSH
9077: LD_VAR 0 1
9081: PPUSH
9082: CALL_OW 255
9086: ST_TO_ADDR
// if side <> russians then
9087: LD_VAR 0 2
9091: PUSH
9092: LD_EXP 3
9096: NONEQUAL
9097: IFFALSE 9101
// exit ;
9099: GO 9241
// case GetType ( un ) of unit_human :
9101: LD_VAR 0 1
9105: PPUSH
9106: CALL_OW 247
9110: PUSH
9111: LD_INT 1
9113: DOUBLE
9114: EQUAL
9115: IFTRUE 9119
9117: GO 9156
9119: POP
// for base in ai_bases do
9120: LD_ADDR_VAR 0 4
9124: PUSH
9125: LD_EXP 49
9129: PUSH
9130: FOR_IN
9131: IFFALSE 9152
// RemoveHumanFromVariables ( base , un , true ) ; unit_vehicle :
9133: LD_VAR 0 4
9137: PPUSH
9138: LD_VAR 0 1
9142: PPUSH
9143: LD_INT 1
9145: PPUSH
9146: CALL 9839 0 3
9150: GO 9130
9152: POP
9153: POP
9154: GO 9241
9156: LD_INT 2
9158: DOUBLE
9159: EQUAL
9160: IFTRUE 9164
9162: GO 9198
9164: POP
// for base in ai_bases do
9165: LD_ADDR_VAR 0 4
9169: PUSH
9170: LD_EXP 49
9174: PUSH
9175: FOR_IN
9176: IFFALSE 9194
// RemoveVehicleFromVariables ( base , un ) ; unit_building :
9178: LD_VAR 0 4
9182: PPUSH
9183: LD_VAR 0 1
9187: PPUSH
9188: CALL 9358 0 2
9192: GO 9175
9194: POP
9195: POP
9196: GO 9241
9198: LD_INT 3
9200: DOUBLE
9201: EQUAL
9202: IFTRUE 9206
9204: GO 9240
9206: POP
// for base in ai_bases do
9207: LD_ADDR_VAR 0 4
9211: PUSH
9212: LD_EXP 49
9216: PUSH
9217: FOR_IN
9218: IFFALSE 9236
// RemoveBuildingFromVariables ( base , un ) ; end ;
9220: LD_VAR 0 4
9224: PPUSH
9225: LD_VAR 0 1
9229: PPUSH
9230: CALL 9244 0 2
9234: GO 9217
9236: POP
9237: POP
9238: GO 9241
9240: POP
// end ;
9241: PPOPN 4
9243: END
// function RemoveBuildingFromVariables ( base , building ) ; var temp_list ; begin
9244: LD_INT 0
9246: PPUSH
9247: PPUSH
// temp_list = ai_all_buildings [ base ] diff building ;
9248: LD_ADDR_VAR 0 4
9252: PUSH
9253: LD_EXP 34
9257: PUSH
9258: LD_VAR 0 1
9262: ARRAY
9263: PUSH
9264: LD_VAR 0 2
9268: DIFF
9269: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
9270: LD_ADDR_EXP 34
9274: PUSH
9275: LD_EXP 34
9279: PPUSH
9280: LD_VAR 0 1
9284: PPUSH
9285: LD_VAR 0 4
9289: PPUSH
9290: CALL_OW 1
9294: ST_TO_ADDR
// if building = ai_building_under_construction [ base ] then
9295: LD_VAR 0 2
9299: PUSH
9300: LD_EXP 32
9304: PUSH
9305: LD_VAR 0 1
9309: ARRAY
9310: EQUAL
9311: IFFALSE 9336
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
9313: LD_ADDR_EXP 32
9317: PUSH
9318: LD_EXP 32
9322: PPUSH
9323: LD_VAR 0 1
9327: PPUSH
9328: LD_INT 0
9330: PPUSH
9331: CALL_OW 1
9335: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , building , false ) ;
9336: LD_VAR 0 1
9340: PPUSH
9341: LD_VAR 0 2
9345: PPUSH
9346: LD_INT 0
9348: PPUSH
9349: CALL 5131 0 3
// end ;
9353: LD_VAR 0 3
9357: RET
// function RemoveVehicleFromVariables ( base , vehicle ) ; var temp_list ; begin
9358: LD_INT 0
9360: PPUSH
9361: PPUSH
// if vehicle in ai_vehicles_defend [ base ] then
9362: LD_VAR 0 2
9366: PUSH
9367: LD_EXP 28
9371: PUSH
9372: LD_VAR 0 1
9376: ARRAY
9377: IN
9378: IFFALSE 9427
// begin temp_list = ai_vehicles_defend [ base ] diff vehicle ;
9380: LD_ADDR_VAR 0 4
9384: PUSH
9385: LD_EXP 28
9389: PUSH
9390: LD_VAR 0 1
9394: ARRAY
9395: PUSH
9396: LD_VAR 0 2
9400: DIFF
9401: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , base , temp_list ) ;
9402: LD_ADDR_EXP 28
9406: PUSH
9407: LD_EXP 28
9411: PPUSH
9412: LD_VAR 0 1
9416: PPUSH
9417: LD_VAR 0 4
9421: PPUSH
9422: CALL_OW 1
9426: ST_TO_ADDR
// end ; if vehicle in ai_vehicles_attack [ base ] then
9427: LD_VAR 0 2
9431: PUSH
9432: LD_EXP 29
9436: PUSH
9437: LD_VAR 0 1
9441: ARRAY
9442: IN
9443: IFFALSE 9492
// begin temp_list = ai_vehicles_attack [ base ] diff vehicle ;
9445: LD_ADDR_VAR 0 4
9449: PUSH
9450: LD_EXP 29
9454: PUSH
9455: LD_VAR 0 1
9459: ARRAY
9460: PUSH
9461: LD_VAR 0 2
9465: DIFF
9466: ST_TO_ADDR
// ai_vehicles_attack = Replace ( ai_vehicles_attack , base , temp_list ) ;
9467: LD_ADDR_EXP 29
9471: PUSH
9472: LD_EXP 29
9476: PPUSH
9477: LD_VAR 0 1
9481: PPUSH
9482: LD_VAR 0 4
9486: PPUSH
9487: CALL_OW 1
9491: ST_TO_ADDR
// end ; if vehicle = ai_cargo_bay [ base ] then
9492: LD_VAR 0 2
9496: PUSH
9497: LD_EXP 51
9501: PUSH
9502: LD_VAR 0 1
9506: ARRAY
9507: EQUAL
9508: IFFALSE 9533
// ai_cargo_bay = Replace ( ai_cargo_bay , base , 0 ) ;
9510: LD_ADDR_EXP 51
9514: PUSH
9515: LD_EXP 51
9519: PPUSH
9520: LD_VAR 0 1
9524: PPUSH
9525: LD_INT 0
9527: PPUSH
9528: CALL_OW 1
9532: ST_TO_ADDR
// if vehicle in ai_retreating_vehicles_defend [ base ] then
9533: LD_VAR 0 2
9537: PUSH
9538: LD_EXP 43
9542: PUSH
9543: LD_VAR 0 1
9547: ARRAY
9548: IN
9549: IFFALSE 9598
// begin temp_list = ai_retreating_vehicles_defend [ base ] diff vehicle ;
9551: LD_ADDR_VAR 0 4
9555: PUSH
9556: LD_EXP 43
9560: PUSH
9561: LD_VAR 0 1
9565: ARRAY
9566: PUSH
9567: LD_VAR 0 2
9571: DIFF
9572: ST_TO_ADDR
// ai_retreating_vehicles_defend = Replace ( ai_retreating_vehicles_defend , base , temp_list ) ;
9573: LD_ADDR_EXP 43
9577: PUSH
9578: LD_EXP 43
9582: PPUSH
9583: LD_VAR 0 1
9587: PPUSH
9588: LD_VAR 0 4
9592: PPUSH
9593: CALL_OW 1
9597: ST_TO_ADDR
// end ; if vehicle in ai_vehicles_being_repaired [ base ] then
9598: LD_VAR 0 2
9602: PUSH
9603: LD_EXP 47
9607: PUSH
9608: LD_VAR 0 1
9612: ARRAY
9613: IN
9614: IFFALSE 9663
// begin temp_list = ai_vehicles_being_repaired [ base ] diff vehicle ;
9616: LD_ADDR_VAR 0 4
9620: PUSH
9621: LD_EXP 47
9625: PUSH
9626: LD_VAR 0 1
9630: ARRAY
9631: PUSH
9632: LD_VAR 0 2
9636: DIFF
9637: ST_TO_ADDR
// ai_vehicles_being_repaired = Replace ( ai_vehicles_being_repaired , base , temp_list ) ;
9638: LD_ADDR_EXP 47
9642: PUSH
9643: LD_EXP 47
9647: PPUSH
9648: LD_VAR 0 1
9652: PPUSH
9653: LD_VAR 0 4
9657: PPUSH
9658: CALL_OW 1
9662: ST_TO_ADDR
// end ; if vehicle in ai_refuel_vehicles_list [ base ] then
9663: LD_VAR 0 2
9667: PUSH
9668: LD_EXP 46
9672: PUSH
9673: LD_VAR 0 1
9677: ARRAY
9678: IN
9679: IFFALSE 9728
// begin temp_list = ai_refuel_vehicles_list [ base ] diff vehicle ;
9681: LD_ADDR_VAR 0 4
9685: PUSH
9686: LD_EXP 46
9690: PUSH
9691: LD_VAR 0 1
9695: ARRAY
9696: PUSH
9697: LD_VAR 0 2
9701: DIFF
9702: ST_TO_ADDR
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
9703: LD_ADDR_EXP 46
9707: PUSH
9708: LD_EXP 46
9712: PPUSH
9713: LD_VAR 0 1
9717: PPUSH
9718: LD_VAR 0 4
9722: PPUSH
9723: CALL_OW 1
9727: ST_TO_ADDR
// end ; if vehicle = ai_vehicle_being_moved [ base ] then
9728: LD_VAR 0 2
9732: PUSH
9733: LD_EXP 36
9737: PUSH
9738: LD_VAR 0 1
9742: ARRAY
9743: EQUAL
9744: IFFALSE 9769
// ai_vehicle_being_moved = Replace ( ai_vehicle_being_moved , base , 0 ) ;
9746: LD_ADDR_EXP 36
9750: PUSH
9751: LD_EXP 36
9755: PPUSH
9756: LD_VAR 0 1
9760: PPUSH
9761: LD_INT 0
9763: PPUSH
9764: CALL_OW 1
9768: ST_TO_ADDR
// if vehicle in ai_vehicles_having_been_moved [ base ] then
9769: LD_VAR 0 2
9773: PUSH
9774: LD_EXP 59
9778: PUSH
9779: LD_VAR 0 1
9783: ARRAY
9784: IN
9785: IFFALSE 9834
// begin temp_list = ai_vehicles_having_been_moved [ base ] diff vehicle ;
9787: LD_ADDR_VAR 0 4
9791: PUSH
9792: LD_EXP 59
9796: PUSH
9797: LD_VAR 0 1
9801: ARRAY
9802: PUSH
9803: LD_VAR 0 2
9807: DIFF
9808: ST_TO_ADDR
// ai_vehicles_having_been_moved = Replace ( ai_vehicles_having_been_moved , base , temp_list ) ;
9809: LD_ADDR_EXP 59
9813: PUSH
9814: LD_EXP 59
9818: PPUSH
9819: LD_VAR 0 1
9823: PPUSH
9824: LD_VAR 0 4
9828: PPUSH
9829: CALL_OW 1
9833: ST_TO_ADDR
// end ; end ;
9834: LD_VAR 0 3
9838: RET
// function RemoveHumanFromVariables ( base , human , check_if_base_is_dead ) ; var temp_list ; begin
9839: LD_INT 0
9841: PPUSH
9842: PPUSH
// if human in ai_soldiers [ base ] then
9843: LD_VAR 0 2
9847: PUSH
9848: LD_EXP 17
9852: PUSH
9853: LD_VAR 0 1
9857: ARRAY
9858: IN
9859: IFFALSE 9908
// begin temp_list = ai_soldiers [ base ] diff human ;
9861: LD_ADDR_VAR 0 5
9865: PUSH
9866: LD_EXP 17
9870: PUSH
9871: LD_VAR 0 1
9875: ARRAY
9876: PUSH
9877: LD_VAR 0 2
9881: DIFF
9882: ST_TO_ADDR
// ai_soldiers = Replace ( ai_soldiers , base , temp_list ) ;
9883: LD_ADDR_EXP 17
9887: PUSH
9888: LD_EXP 17
9892: PPUSH
9893: LD_VAR 0 1
9897: PPUSH
9898: LD_VAR 0 5
9902: PPUSH
9903: CALL_OW 1
9907: ST_TO_ADDR
// end ; if human in ai_attacking_soldiers [ base ] then
9908: LD_VAR 0 2
9912: PUSH
9913: LD_EXP 54
9917: PUSH
9918: LD_VAR 0 1
9922: ARRAY
9923: IN
9924: IFFALSE 9973
// begin temp_list = ai_attacking_soldiers [ base ] diff human ;
9926: LD_ADDR_VAR 0 5
9930: PUSH
9931: LD_EXP 54
9935: PUSH
9936: LD_VAR 0 1
9940: ARRAY
9941: PUSH
9942: LD_VAR 0 2
9946: DIFF
9947: ST_TO_ADDR
// ai_attacking_soldiers = Replace ( ai_attacking_soldiers , base , temp_list ) ;
9948: LD_ADDR_EXP 54
9952: PUSH
9953: LD_EXP 54
9957: PPUSH
9958: LD_VAR 0 1
9962: PPUSH
9963: LD_VAR 0 5
9967: PPUSH
9968: CALL_OW 1
9972: ST_TO_ADDR
// end ; if human in ai_engineers [ base ] then
9973: LD_VAR 0 2
9977: PUSH
9978: LD_EXP 18
9982: PUSH
9983: LD_VAR 0 1
9987: ARRAY
9988: IN
9989: IFFALSE 10038
// begin temp_list = ai_engineers [ base ] diff human ;
9991: LD_ADDR_VAR 0 5
9995: PUSH
9996: LD_EXP 18
10000: PUSH
10001: LD_VAR 0 1
10005: ARRAY
10006: PUSH
10007: LD_VAR 0 2
10011: DIFF
10012: ST_TO_ADDR
// ai_engineers = Replace ( ai_engineers , base , temp_list ) ;
10013: LD_ADDR_EXP 18
10017: PUSH
10018: LD_EXP 18
10022: PPUSH
10023: LD_VAR 0 1
10027: PPUSH
10028: LD_VAR 0 5
10032: PPUSH
10033: CALL_OW 1
10037: ST_TO_ADDR
// end ; if human in ai_apemen_engineers [ base ] then
10038: LD_VAR 0 2
10042: PUSH
10043: LD_EXP 53
10047: PUSH
10048: LD_VAR 0 1
10052: ARRAY
10053: IN
10054: IFFALSE 10103
// begin temp_list = ai_apemen_engineers [ base ] diff human ;
10056: LD_ADDR_VAR 0 5
10060: PUSH
10061: LD_EXP 53
10065: PUSH
10066: LD_VAR 0 1
10070: ARRAY
10071: PUSH
10072: LD_VAR 0 2
10076: DIFF
10077: ST_TO_ADDR
// ai_apemen_engineers = Replace ( ai_apemen_engineers , base , temp_list ) ;
10078: LD_ADDR_EXP 53
10082: PUSH
10083: LD_EXP 53
10087: PPUSH
10088: LD_VAR 0 1
10092: PPUSH
10093: LD_VAR 0 5
10097: PPUSH
10098: CALL_OW 1
10102: ST_TO_ADDR
// end ; if human in ai_mechanics_defend [ base ] then
10103: LD_VAR 0 2
10107: PUSH
10108: LD_EXP 19
10112: PUSH
10113: LD_VAR 0 1
10117: ARRAY
10118: IN
10119: IFFALSE 10168
// begin temp_list = ai_mechanics_defend [ base ] diff human ;
10121: LD_ADDR_VAR 0 5
10125: PUSH
10126: LD_EXP 19
10130: PUSH
10131: LD_VAR 0 1
10135: ARRAY
10136: PUSH
10137: LD_VAR 0 2
10141: DIFF
10142: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , base , temp_list ) ;
10143: LD_ADDR_EXP 19
10147: PUSH
10148: LD_EXP 19
10152: PPUSH
10153: LD_VAR 0 1
10157: PPUSH
10158: LD_VAR 0 5
10162: PPUSH
10163: CALL_OW 1
10167: ST_TO_ADDR
// end ; if human in ai_mechanics_attack [ base ] then
10168: LD_VAR 0 2
10172: PUSH
10173: LD_EXP 20
10177: PUSH
10178: LD_VAR 0 1
10182: ARRAY
10183: IN
10184: IFFALSE 10233
// begin temp_list = ai_mechanics_attack [ base ] diff human ;
10186: LD_ADDR_VAR 0 5
10190: PUSH
10191: LD_EXP 20
10195: PUSH
10196: LD_VAR 0 1
10200: ARRAY
10201: PUSH
10202: LD_VAR 0 2
10206: DIFF
10207: ST_TO_ADDR
// ai_mechanics_attack = Replace ( ai_mechanics_attack , base , temp_list ) ;
10208: LD_ADDR_EXP 20
10212: PUSH
10213: LD_EXP 20
10217: PPUSH
10218: LD_VAR 0 1
10222: PPUSH
10223: LD_VAR 0 5
10227: PPUSH
10228: CALL_OW 1
10232: ST_TO_ADDR
// end ; if human in ai_scientists [ base ] then
10233: LD_VAR 0 2
10237: PUSH
10238: LD_EXP 21
10242: PUSH
10243: LD_VAR 0 1
10247: ARRAY
10248: IN
10249: IFFALSE 10298
// begin temp_list = ai_scientists [ base ] diff human ;
10251: LD_ADDR_VAR 0 5
10255: PUSH
10256: LD_EXP 21
10260: PUSH
10261: LD_VAR 0 1
10265: ARRAY
10266: PUSH
10267: LD_VAR 0 2
10271: DIFF
10272: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , base , temp_list ) ;
10273: LD_ADDR_EXP 21
10277: PUSH
10278: LD_EXP 21
10282: PPUSH
10283: LD_VAR 0 1
10287: PPUSH
10288: LD_VAR 0 5
10292: PPUSH
10293: CALL_OW 1
10297: ST_TO_ADDR
// end ; if human in ai_attacking_scientists [ base ] then
10298: LD_VAR 0 2
10302: PUSH
10303: LD_EXP 55
10307: PUSH
10308: LD_VAR 0 1
10312: ARRAY
10313: IN
10314: IFFALSE 10363
// begin temp_list = ai_attacking_scientists [ base ] diff human ;
10316: LD_ADDR_VAR 0 5
10320: PUSH
10321: LD_EXP 55
10325: PUSH
10326: LD_VAR 0 1
10330: ARRAY
10331: PUSH
10332: LD_VAR 0 2
10336: DIFF
10337: ST_TO_ADDR
// ai_attacking_scientists = Replace ( ai_attacking_scientists , base , temp_list ) ;
10338: LD_ADDR_EXP 55
10342: PUSH
10343: LD_EXP 55
10347: PPUSH
10348: LD_VAR 0 1
10352: PPUSH
10353: LD_VAR 0 5
10357: PPUSH
10358: CALL_OW 1
10362: ST_TO_ADDR
// end ; if human in ai_heal_these_humans [ base ] then
10363: LD_VAR 0 2
10367: PUSH
10368: LD_EXP 33
10372: PUSH
10373: LD_VAR 0 1
10377: ARRAY
10378: IN
10379: IFFALSE 10428
// begin temp_list = ai_heal_these_humans [ base ] diff human ;
10381: LD_ADDR_VAR 0 5
10385: PUSH
10386: LD_EXP 33
10390: PUSH
10391: LD_VAR 0 1
10395: ARRAY
10396: PUSH
10397: LD_VAR 0 2
10401: DIFF
10402: ST_TO_ADDR
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
10403: LD_ADDR_EXP 33
10407: PUSH
10408: LD_EXP 33
10412: PPUSH
10413: LD_VAR 0 1
10417: PPUSH
10418: LD_VAR 0 5
10422: PPUSH
10423: CALL_OW 1
10427: ST_TO_ADDR
// end ; if human = ai_building_constructor [ base ] then
10428: LD_VAR 0 2
10432: PUSH
10433: LD_EXP 35
10437: PUSH
10438: LD_VAR 0 1
10442: ARRAY
10443: EQUAL
10444: IFFALSE 10469
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
10446: LD_ADDR_EXP 35
10450: PUSH
10451: LD_EXP 35
10455: PPUSH
10456: LD_VAR 0 1
10460: PPUSH
10461: LD_INT 0
10463: PPUSH
10464: CALL_OW 1
10468: ST_TO_ADDR
// if human in ai_retreating_attacking_humans [ base ] then
10469: LD_VAR 0 2
10473: PUSH
10474: LD_EXP 57
10478: PUSH
10479: LD_VAR 0 1
10483: ARRAY
10484: IN
10485: IFFALSE 10534
// begin temp_list = ai_retreating_attacking_humans [ base ] diff human ;
10487: LD_ADDR_VAR 0 5
10491: PUSH
10492: LD_EXP 57
10496: PUSH
10497: LD_VAR 0 1
10501: ARRAY
10502: PUSH
10503: LD_VAR 0 2
10507: DIFF
10508: ST_TO_ADDR
// ai_retreating_attacking_humans = Replace ( ai_retreating_attacking_humans , base , temp_list ) ;
10509: LD_ADDR_EXP 57
10513: PUSH
10514: LD_EXP 57
10518: PPUSH
10519: LD_VAR 0 1
10523: PPUSH
10524: LD_VAR 0 5
10528: PPUSH
10529: CALL_OW 1
10533: ST_TO_ADDR
// end ; if check_if_base_is_dead then
10534: LD_VAR 0 3
10538: IFFALSE 10660
// if ( ( ai_soldiers [ base ] ^ ai_attacking_soldiers [ base ] ^ ai_engineers [ base ] ^ ai_apemen_engineers [ base ] ^ ai_mechanics_defend [ base ] ^ ai_mechanics_attack [ base ] ^ ai_scientists [ base ] ^ ai_attacking_scientists [ base ] ) diff 0 ) = 0 then
10540: LD_EXP 17
10544: PUSH
10545: LD_VAR 0 1
10549: ARRAY
10550: PUSH
10551: LD_EXP 54
10555: PUSH
10556: LD_VAR 0 1
10560: ARRAY
10561: ADD
10562: PUSH
10563: LD_EXP 18
10567: PUSH
10568: LD_VAR 0 1
10572: ARRAY
10573: ADD
10574: PUSH
10575: LD_EXP 53
10579: PUSH
10580: LD_VAR 0 1
10584: ARRAY
10585: ADD
10586: PUSH
10587: LD_EXP 19
10591: PUSH
10592: LD_VAR 0 1
10596: ARRAY
10597: ADD
10598: PUSH
10599: LD_EXP 20
10603: PUSH
10604: LD_VAR 0 1
10608: ARRAY
10609: ADD
10610: PUSH
10611: LD_EXP 21
10615: PUSH
10616: LD_VAR 0 1
10620: ARRAY
10621: ADD
10622: PUSH
10623: LD_EXP 55
10627: PUSH
10628: LD_VAR 0 1
10632: ARRAY
10633: ADD
10634: PUSH
10635: LD_INT 0
10637: DIFF
10638: PUSH
10639: LD_INT 0
10641: EQUAL
10642: IFFALSE 10660
// ai_bases = ai_bases diff base ;
10644: LD_ADDR_EXP 49
10648: PUSH
10649: LD_EXP 49
10653: PUSH
10654: LD_VAR 0 1
10658: DIFF
10659: ST_TO_ADDR
// end ;
10660: LD_VAR 0 4
10664: RET
// function GetBaseNation ( base ) ; begin
10665: LD_INT 0
10667: PPUSH
// case base of 1 :
10668: LD_VAR 0 1
10672: PUSH
10673: LD_INT 1
10675: DOUBLE
10676: EQUAL
10677: IFTRUE 10681
10679: GO 10692
10681: POP
// result = nation_russian ; end ;
10682: LD_ADDR_VAR 0 2
10686: PUSH
10687: LD_INT 3
10689: ST_TO_ADDR
10690: GO 10693
10692: POP
// end ;
10693: LD_VAR 0 2
10697: RET
// function FindBase ( un ) ; var i , hexes , k ; begin
10698: LD_INT 0
10700: PPUSH
10701: PPUSH
10702: PPUSH
10703: PPUSH
// result = 1 ;
10704: LD_ADDR_VAR 0 2
10708: PUSH
10709: LD_INT 1
10711: ST_TO_ADDR
// end ;
10712: LD_VAR 0 2
10716: RET
// function GetBaseSide ( base ) ; begin
10717: LD_INT 0
10719: PPUSH
// result = russians ;
10720: LD_ADDR_VAR 0 2
10724: PUSH
10725: LD_EXP 3
10729: ST_TO_ADDR
// end ;
10730: LD_VAR 0 2
10734: RET
// function GetBaseArea ( base ) ; begin
10735: LD_INT 0
10737: PPUSH
// result = ru_base_area ;
10738: LD_ADDR_VAR 0 2
10742: PUSH
10743: LD_INT 1
10745: ST_TO_ADDR
// end ;
10746: LD_VAR 0 2
10750: RET
// every 0 0$1 do var side , i , temp_list , buildings_list , soldiers_list , temp_unit , base , val , temp_list_2 , temp_unit_2 , j , leave_folks_for_defences , num_sol ; var temp_list_3 , bunkers , under_attack ;
10751: GO 10753
10753: DISABLE
10754: LD_INT 0
10756: PPUSH
10757: PPUSH
10758: PPUSH
10759: PPUSH
10760: PPUSH
10761: PPUSH
10762: PPUSH
10763: PPUSH
10764: PPUSH
10765: PPUSH
10766: PPUSH
10767: PPUSH
10768: PPUSH
10769: PPUSH
10770: PPUSH
10771: PPUSH
// begin side = russians ;
10772: LD_ADDR_VAR 0 1
10776: PUSH
10777: LD_EXP 3
10781: ST_TO_ADDR
// for base in ai_bases do
10782: LD_ADDR_VAR 0 7
10786: PUSH
10787: LD_EXP 49
10791: PUSH
10792: FOR_IN
10793: IFFALSE 11626
// begin soldiers_list = ai_soldiers [ base ] ;
10795: LD_ADDR_VAR 0 5
10799: PUSH
10800: LD_EXP 17
10804: PUSH
10805: LD_VAR 0 7
10809: ARRAY
10810: ST_TO_ADDR
// under_attack := BaseUnderAttack ( base , - 1 ) ;
10811: LD_ADDR_VAR 0 16
10815: PUSH
10816: LD_VAR 0 7
10820: PPUSH
10821: LD_INT 1
10823: NEG
10824: PPUSH
10825: CALL 16668 0 2
10829: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
10830: LD_ADDR_VAR 0 3
10834: PUSH
10835: LD_EXP 33
10839: PUSH
10840: LD_VAR 0 7
10844: ARRAY
10845: ST_TO_ADDR
// for i in soldiers_list diff ai_heal_these_humans [ base ] do
10846: LD_ADDR_VAR 0 2
10850: PUSH
10851: LD_VAR 0 5
10855: PUSH
10856: LD_EXP 33
10860: PUSH
10861: LD_VAR 0 7
10865: ARRAY
10866: DIFF
10867: PUSH
10868: FOR_IN
10869: IFFALSE 10904
// if GetLives ( i ) < 800 then
10871: LD_VAR 0 2
10875: PPUSH
10876: CALL_OW 256
10880: PUSH
10881: LD_INT 800
10883: LESS
10884: IFFALSE 10902
// temp_list = temp_list ^ i ;
10886: LD_ADDR_VAR 0 3
10890: PUSH
10891: LD_VAR 0 3
10895: PUSH
10896: LD_VAR 0 2
10900: ADD
10901: ST_TO_ADDR
10902: GO 10868
10904: POP
10905: POP
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
10906: LD_ADDR_EXP 33
10910: PUSH
10911: LD_EXP 33
10915: PPUSH
10916: LD_VAR 0 7
10920: PPUSH
10921: LD_VAR 0 3
10925: PPUSH
10926: CALL_OW 1
10930: ST_TO_ADDR
// if not under_attack then
10931: LD_VAR 0 16
10935: NOT
10936: IFFALSE 11051
// begin for i in ai_heal_these_humans [ base ] do
10938: LD_ADDR_VAR 0 2
10942: PUSH
10943: LD_EXP 33
10947: PUSH
10948: LD_VAR 0 7
10952: ARRAY
10953: PUSH
10954: FOR_IN
10955: IFFALSE 11027
// if i in soldiers_list then
10957: LD_VAR 0 2
10961: PUSH
10962: LD_VAR 0 5
10966: IN
10967: IFFALSE 11025
// case GetType ( IsInUnit ( i ) ) of unit_vehicle :
10969: LD_VAR 0 2
10973: PPUSH
10974: CALL_OW 310
10978: PPUSH
10979: CALL_OW 247
10983: PUSH
10984: LD_INT 2
10986: DOUBLE
10987: EQUAL
10988: IFTRUE 10992
10990: GO 11004
10992: POP
// ComExitVehicle ( i ) ; unit_building :
10993: LD_VAR 0 2
10997: PPUSH
10998: CALL_OW 121
11002: GO 11025
11004: LD_INT 3
11006: DOUBLE
11007: EQUAL
11008: IFTRUE 11012
11010: GO 11024
11012: POP
// ComExitBuilding ( i ) ; end ;
11013: LD_VAR 0 2
11017: PPUSH
11018: CALL_OW 122
11022: GO 11025
11024: POP
11025: GO 10954
11027: POP
11028: POP
// soldiers_list = soldiers_list diff ai_heal_these_humans [ base ] ;
11029: LD_ADDR_VAR 0 5
11033: PUSH
11034: LD_VAR 0 5
11038: PUSH
11039: LD_EXP 33
11043: PUSH
11044: LD_VAR 0 7
11048: ARRAY
11049: DIFF
11050: ST_TO_ADDR
// end ; if soldiers_list = 0 then
11051: LD_VAR 0 5
11055: PUSH
11056: LD_INT 0
11058: EQUAL
11059: IFFALSE 11063
// continue ;
11061: GO 10792
// i = false ;
11063: LD_ADDR_VAR 0 2
11067: PUSH
11068: LD_INT 0
11070: ST_TO_ADDR
// if IsOk ( ai_depot [ base ] ) then
11071: LD_EXP 23
11075: PUSH
11076: LD_VAR 0 7
11080: ARRAY
11081: PPUSH
11082: CALL_OW 302
11086: IFFALSE 11126
// if GetEnergy ( GetBase ( ai_depot [ base ] ) ) [ 4 ] > 0 then
11088: LD_EXP 23
11092: PUSH
11093: LD_VAR 0 7
11097: ARRAY
11098: PPUSH
11099: CALL_OW 274
11103: PPUSH
11104: CALL_OW 278
11108: PUSH
11109: LD_INT 4
11111: ARRAY
11112: PUSH
11113: LD_INT 0
11115: GREATER
11116: IFFALSE 11126
// i = true ;
11118: LD_ADDR_VAR 0 2
11122: PUSH
11123: LD_INT 1
11125: ST_TO_ADDR
// if i then
11126: LD_VAR 0 2
11130: IFFALSE 11150
// bunkers = ai_bunkers [ base ] else
11132: LD_ADDR_VAR 0 15
11136: PUSH
11137: LD_EXP 40
11141: PUSH
11142: LD_VAR 0 7
11146: ARRAY
11147: ST_TO_ADDR
11148: GO 11211
// begin bunkers = [ ] ;
11150: LD_ADDR_VAR 0 15
11154: PUSH
11155: EMPTY
11156: ST_TO_ADDR
// for i in ai_bunkers [ base ] do
11157: LD_ADDR_VAR 0 2
11161: PUSH
11162: LD_EXP 40
11166: PUSH
11167: LD_VAR 0 7
11171: ARRAY
11172: PUSH
11173: FOR_IN
11174: IFFALSE 11209
// if GetBType ( i ) = b_breastwork then
11176: LD_VAR 0 2
11180: PPUSH
11181: CALL_OW 266
11185: PUSH
11186: LD_INT 31
11188: EQUAL
11189: IFFALSE 11207
// bunkers = bunkers ^ i ;
11191: LD_ADDR_VAR 0 15
11195: PUSH
11196: LD_VAR 0 15
11200: PUSH
11201: LD_VAR 0 2
11205: ADD
11206: ST_TO_ADDR
11207: GO 11173
11209: POP
11210: POP
// end ; buildings_list = [ ] ;
11211: LD_ADDR_VAR 0 4
11215: PUSH
11216: EMPTY
11217: ST_TO_ADDR
// for i in UnitFilter ( bunkers , [ f_ok ] ) do
11218: LD_ADDR_VAR 0 2
11222: PUSH
11223: LD_VAR 0 15
11227: PPUSH
11228: LD_INT 50
11230: PUSH
11231: EMPTY
11232: LIST
11233: PPUSH
11234: CALL_OW 72
11238: PUSH
11239: FOR_IN
11240: IFFALSE 11303
// begin temp_unit = UnitsInside ( i ) ;
11242: LD_ADDR_VAR 0 6
11246: PUSH
11247: LD_VAR 0 2
11251: PPUSH
11252: CALL_OW 313
11256: ST_TO_ADDR
// if temp_unit = 0 then
11257: LD_VAR 0 6
11261: PUSH
11262: LD_INT 0
11264: EQUAL
11265: IFFALSE 11285
// buildings_list = buildings_list ^ i else
11267: LD_ADDR_VAR 0 4
11271: PUSH
11272: LD_VAR 0 4
11276: PUSH
11277: LD_VAR 0 2
11281: ADD
11282: ST_TO_ADDR
11283: GO 11301
// soldiers_list = soldiers_list diff temp_unit ;
11285: LD_ADDR_VAR 0 5
11289: PUSH
11290: LD_VAR 0 5
11294: PUSH
11295: LD_VAR 0 6
11299: DIFF
11300: ST_TO_ADDR
// end ;
11301: GO 11239
11303: POP
11304: POP
// if buildings_list > 0 then
11305: LD_VAR 0 4
11309: PUSH
11310: LD_INT 0
11312: GREATER
11313: IFFALSE 11559
// begin if not under_attack then
11315: LD_VAR 0 16
11319: NOT
11320: IFFALSE 11390
// begin temp_list = [ ] ;
11322: LD_ADDR_VAR 0 3
11326: PUSH
11327: EMPTY
11328: ST_TO_ADDR
// for i in soldiers_list do
11329: LD_ADDR_VAR 0 2
11333: PUSH
11334: LD_VAR 0 5
11338: PUSH
11339: FOR_IN
11340: IFFALSE 11368
// temp_list = temp_list ^ GetSkill ( i , skill_combat ) ;
11342: LD_ADDR_VAR 0 3
11346: PUSH
11347: LD_VAR 0 3
11351: PUSH
11352: LD_VAR 0 2
11356: PPUSH
11357: LD_INT 1
11359: PPUSH
11360: CALL_OW 259
11364: ADD
11365: ST_TO_ADDR
11366: GO 11339
11368: POP
11369: POP
// soldiers_list = SortListByListDesc ( soldiers_list , temp_list ) ;
11370: LD_ADDR_VAR 0 5
11374: PUSH
11375: LD_VAR 0 5
11379: PPUSH
11380: LD_VAR 0 3
11384: PPUSH
11385: CALL_OW 77
11389: ST_TO_ADDR
// end ; for i = 1 to buildings_list do
11390: LD_ADDR_VAR 0 2
11394: PUSH
11395: DOUBLE
11396: LD_INT 1
11398: DEC
11399: ST_TO_ADDR
11400: LD_VAR 0 4
11404: PUSH
11405: FOR_TO
11406: IFFALSE 11557
// begin if soldiers_list = 0 then
11408: LD_VAR 0 5
11412: PUSH
11413: LD_INT 0
11415: EQUAL
11416: IFFALSE 11420
// break ;
11418: GO 11557
// if not under_attack then
11420: LD_VAR 0 16
11424: NOT
11425: IFFALSE 11443
// temp_unit = soldiers_list [ 1 ] else
11427: LD_ADDR_VAR 0 6
11431: PUSH
11432: LD_VAR 0 5
11436: PUSH
11437: LD_INT 1
11439: ARRAY
11440: ST_TO_ADDR
11441: GO 11519
// begin temp_list = [ ] ;
11443: LD_ADDR_VAR 0 3
11447: PUSH
11448: EMPTY
11449: ST_TO_ADDR
// for j in soldiers_list do
11450: LD_ADDR_VAR 0 11
11454: PUSH
11455: LD_VAR 0 5
11459: PUSH
11460: FOR_IN
11461: IFFALSE 11497
// temp_list = temp_list ^ GetDistUnits ( j , buildings_list [ i ] ) ;
11463: LD_ADDR_VAR 0 3
11467: PUSH
11468: LD_VAR 0 3
11472: PUSH
11473: LD_VAR 0 11
11477: PPUSH
11478: LD_VAR 0 4
11482: PUSH
11483: LD_VAR 0 2
11487: ARRAY
11488: PPUSH
11489: CALL_OW 296
11493: ADD
11494: ST_TO_ADDR
11495: GO 11460
11497: POP
11498: POP
// temp_unit = WorstFromListByList ( soldiers_list , temp_list ) ;
11499: LD_ADDR_VAR 0 6
11503: PUSH
11504: LD_VAR 0 5
11508: PPUSH
11509: LD_VAR 0 3
11513: PPUSH
11514: CALL_OW 78
11518: ST_TO_ADDR
// end ; ComEnterUnit ( temp_unit , buildings_list [ i ] ) ;
11519: LD_VAR 0 6
11523: PPUSH
11524: LD_VAR 0 4
11528: PUSH
11529: LD_VAR 0 2
11533: ARRAY
11534: PPUSH
11535: CALL_OW 120
// soldiers_list = soldiers_list diff temp_unit ;
11539: LD_ADDR_VAR 0 5
11543: PUSH
11544: LD_VAR 0 5
11548: PUSH
11549: LD_VAR 0 6
11553: DIFF
11554: ST_TO_ADDR
// end ;
11555: GO 11405
11557: POP
11558: POP
// end ; DistributeHumansToBuildings ( base , soldiers_list , UnitFilter ( ai_armouries [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , false , 6 , true , true ) ;
11559: LD_VAR 0 7
11563: PPUSH
11564: LD_VAR 0 5
11568: PPUSH
11569: LD_EXP 39
11573: PUSH
11574: LD_VAR 0 7
11578: ARRAY
11579: PPUSH
11580: LD_INT 50
11582: PUSH
11583: EMPTY
11584: LIST
11585: PUSH
11586: LD_INT 3
11588: PUSH
11589: LD_INT 57
11591: PUSH
11592: EMPTY
11593: LIST
11594: PUSH
11595: EMPTY
11596: LIST
11597: LIST
11598: PUSH
11599: EMPTY
11600: LIST
11601: LIST
11602: PPUSH
11603: CALL_OW 72
11607: PPUSH
11608: LD_INT 0
11610: PPUSH
11611: LD_INT 6
11613: PPUSH
11614: LD_INT 1
11616: PPUSH
11617: LD_INT 1
11619: PPUSH
11620: CALL 11632 0 7
// end ;
11624: GO 10792
11626: POP
11627: POP
// enable ;
11628: ENABLE
// end ;
11629: PPOPN 16
11631: END
// function DistributeHumansToBuildings ( base , human_list , building_list , change_to_this_class , building_capacity , help_building , aggressive_pullback ) ; var i , temp_list , val , temp_unit , area , under_attack ; begin
11632: LD_INT 0
11634: PPUSH
11635: PPUSH
11636: PPUSH
11637: PPUSH
11638: PPUSH
11639: PPUSH
11640: PPUSH
// if human_list = 0 then
11641: LD_VAR 0 2
11645: PUSH
11646: LD_INT 0
11648: EQUAL
11649: IFFALSE 11653
// exit ;
11651: GO 12406
// area = ru_base_area ;
11653: LD_ADDR_VAR 0 13
11657: PUSH
11658: LD_INT 1
11660: ST_TO_ADDR
// under_attack = BaseUnderAttack ( base , - 1 ) ;
11661: LD_ADDR_VAR 0 14
11665: PUSH
11666: LD_VAR 0 1
11670: PPUSH
11671: LD_INT 1
11673: NEG
11674: PPUSH
11675: CALL 16668 0 2
11679: ST_TO_ADDR
// val = building_list + 0 ;
11680: LD_ADDR_VAR 0 11
11684: PUSH
11685: LD_VAR 0 3
11689: PUSH
11690: LD_INT 0
11692: PLUS
11693: ST_TO_ADDR
// while val > 0 and human_list > 0 do
11694: LD_VAR 0 11
11698: PUSH
11699: LD_INT 0
11701: GREATER
11702: PUSH
11703: LD_VAR 0 2
11707: PUSH
11708: LD_INT 0
11710: GREATER
11711: AND
11712: IFFALSE 12150
// begin temp_list = [ ] ;
11714: LD_ADDR_VAR 0 10
11718: PUSH
11719: EMPTY
11720: ST_TO_ADDR
// for i in human_list do
11721: LD_ADDR_VAR 0 9
11725: PUSH
11726: LD_VAR 0 2
11730: PUSH
11731: FOR_IN
11732: IFFALSE 11775
// if IsInUnit ( i ) = building_list [ val ] then
11734: LD_VAR 0 9
11738: PPUSH
11739: CALL_OW 310
11743: PUSH
11744: LD_VAR 0 3
11748: PUSH
11749: LD_VAR 0 11
11753: ARRAY
11754: EQUAL
11755: IFFALSE 11773
// temp_list = temp_list ^ i ;
11757: LD_ADDR_VAR 0 10
11761: PUSH
11762: LD_VAR 0 10
11766: PUSH
11767: LD_VAR 0 9
11771: ADD
11772: ST_TO_ADDR
11773: GO 11731
11775: POP
11776: POP
// human_list = temp_list ^ ( human_list diff temp_list ) ;
11777: LD_ADDR_VAR 0 2
11781: PUSH
11782: LD_VAR 0 10
11786: PUSH
11787: LD_VAR 0 2
11791: PUSH
11792: LD_VAR 0 10
11796: DIFF
11797: ADD
11798: ST_TO_ADDR
// temp_list = [ ] ;
11799: LD_ADDR_VAR 0 10
11803: PUSH
11804: EMPTY
11805: ST_TO_ADDR
// for i = 1 to human_list div val do
11806: LD_ADDR_VAR 0 9
11810: PUSH
11811: DOUBLE
11812: LD_INT 1
11814: DEC
11815: ST_TO_ADDR
11816: LD_VAR 0 2
11820: PUSH
11821: LD_VAR 0 11
11825: DIV
11826: PUSH
11827: FOR_TO
11828: IFFALSE 11884
// begin if i > building_capacity then
11830: LD_VAR 0 9
11834: PUSH
11835: LD_VAR 0 5
11839: GREATER
11840: IFFALSE 11844
// break ;
11842: GO 11884
// temp_list = temp_list ^ human_list [ 1 ] ;
11844: LD_ADDR_VAR 0 10
11848: PUSH
11849: LD_VAR 0 10
11853: PUSH
11854: LD_VAR 0 2
11858: PUSH
11859: LD_INT 1
11861: ARRAY
11862: ADD
11863: ST_TO_ADDR
// human_list = Delete ( human_list , 1 ) ;
11864: LD_ADDR_VAR 0 2
11868: PUSH
11869: LD_VAR 0 2
11873: PPUSH
11874: LD_INT 1
11876: PPUSH
11877: CALL_OW 3
11881: ST_TO_ADDR
// end ;
11882: GO 11827
11884: POP
11885: POP
// for i in temp_list do
11886: LD_ADDR_VAR 0 9
11890: PUSH
11891: LD_VAR 0 10
11895: PUSH
11896: FOR_IN
11897: IFFALSE 12132
// begin temp_unit = IsInUnit ( i ) ;
11899: LD_ADDR_VAR 0 12
11903: PUSH
11904: LD_VAR 0 9
11908: PPUSH
11909: CALL_OW 310
11913: ST_TO_ADDR
// if temp_unit <> building_list [ val ] then
11914: LD_VAR 0 12
11918: PUSH
11919: LD_VAR 0 3
11923: PUSH
11924: LD_VAR 0 11
11928: ARRAY
11929: NONEQUAL
11930: IFFALSE 12130
// case GetType ( IsInUnit ( i ) ) of unit_vehicle :
11932: LD_VAR 0 9
11936: PPUSH
11937: CALL_OW 310
11941: PPUSH
11942: CALL_OW 247
11946: PUSH
11947: LD_INT 2
11949: DOUBLE
11950: EQUAL
11951: IFTRUE 11955
11953: GO 11967
11955: POP
// ComExitVehicle ( i ) ; unit_building :
11956: LD_VAR 0 9
11960: PPUSH
11961: CALL_OW 121
11965: GO 12130
11967: LD_INT 3
11969: DOUBLE
11970: EQUAL
11971: IFTRUE 11975
11973: GO 11987
11975: POP
// ComExitBuilding ( i ) ; else
11976: LD_VAR 0 9
11980: PPUSH
11981: CALL_OW 122
11985: GO 12130
11987: POP
// begin if IsInArea ( i , area ) or not aggressive_pullback then
11988: LD_VAR 0 9
11992: PPUSH
11993: LD_VAR 0 13
11997: PPUSH
11998: CALL_OW 308
12002: PUSH
12003: LD_VAR 0 7
12007: NOT
12008: OR
12009: IFFALSE 12033
// ComEnterUnit ( i , building_list [ val ] ) else
12011: LD_VAR 0 9
12015: PPUSH
12016: LD_VAR 0 3
12020: PUSH
12021: LD_VAR 0 11
12025: ARRAY
12026: PPUSH
12027: CALL_OW 120
12031: GO 12074
// ComAgressiveMove ( i , GetX ( building_list [ val ] ) , GetY ( building_list [ val ] ) ) ;
12033: LD_VAR 0 9
12037: PPUSH
12038: LD_VAR 0 3
12042: PUSH
12043: LD_VAR 0 11
12047: ARRAY
12048: PPUSH
12049: CALL_OW 250
12053: PPUSH
12054: LD_VAR 0 3
12058: PUSH
12059: LD_VAR 0 11
12063: ARRAY
12064: PPUSH
12065: CALL_OW 251
12069: PPUSH
12070: CALL_OW 114
// if change_to_this_class > 0 then
12074: LD_VAR 0 4
12078: PUSH
12079: LD_INT 0
12081: GREATER
12082: IFFALSE 12130
// if GetClass ( i ) <> change_to_this_class and GetNation ( i ) <> nation_nature then
12084: LD_VAR 0 9
12088: PPUSH
12089: CALL_OW 257
12093: PUSH
12094: LD_VAR 0 4
12098: NONEQUAL
12099: PUSH
12100: LD_VAR 0 9
12104: PPUSH
12105: CALL_OW 248
12109: PUSH
12110: LD_INT 0
12112: NONEQUAL
12113: AND
12114: IFFALSE 12130
// AddComChangeProfession ( i , change_to_this_class ) ;
12116: LD_VAR 0 9
12120: PPUSH
12121: LD_VAR 0 4
12125: PPUSH
12126: CALL_OW 183
// end ; end ; end ;
12130: GO 11896
12132: POP
12133: POP
// val = val - 1 ;
12134: LD_ADDR_VAR 0 11
12138: PUSH
12139: LD_VAR 0 11
12143: PUSH
12144: LD_INT 1
12146: MINUS
12147: ST_TO_ADDR
// end ;
12148: GO 11694
// if human_list > 0 then
12150: LD_VAR 0 2
12154: PUSH
12155: LD_INT 0
12157: GREATER
12158: IFFALSE 12406
// if ai_building_under_construction [ base ] > 0 and help_building and not under_attack then
12160: LD_EXP 32
12164: PUSH
12165: LD_VAR 0 1
12169: ARRAY
12170: PUSH
12171: LD_INT 0
12173: GREATER
12174: PUSH
12175: LD_VAR 0 6
12179: AND
12180: PUSH
12181: LD_VAR 0 14
12185: NOT
12186: AND
12187: IFFALSE 12258
// begin for i in human_list do
12189: LD_ADDR_VAR 0 9
12193: PUSH
12194: LD_VAR 0 2
12198: PUSH
12199: FOR_IN
12200: IFFALSE 12254
// SetTaskList ( i , [ [ h , 0 , 0 , ai_building_under_construction [ base ] , 0 , 0 , 0 ] ] ) ;
12202: LD_VAR 0 9
12206: PPUSH
12207: LD_STRING h
12209: PUSH
12210: LD_INT 0
12212: PUSH
12213: LD_INT 0
12215: PUSH
12216: LD_EXP 32
12220: PUSH
12221: LD_VAR 0 1
12225: ARRAY
12226: PUSH
12227: LD_INT 0
12229: PUSH
12230: LD_INT 0
12232: PUSH
12233: LD_INT 0
12235: PUSH
12236: EMPTY
12237: LIST
12238: LIST
12239: LIST
12240: LIST
12241: LIST
12242: LIST
12243: LIST
12244: PUSH
12245: EMPTY
12246: LIST
12247: PPUSH
12248: CALL_OW 446
12252: GO 12199
12254: POP
12255: POP
// end else
12256: GO 12406
// for i in human_list do
12258: LD_ADDR_VAR 0 9
12262: PUSH
12263: LD_VAR 0 2
12267: PUSH
12268: FOR_IN
12269: IFFALSE 12404
// if GetDistUnitXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) > 4 then
12271: LD_VAR 0 9
12275: PPUSH
12276: LD_EXP 31
12280: PUSH
12281: LD_VAR 0 1
12285: ARRAY
12286: PUSH
12287: LD_INT 1
12289: ARRAY
12290: PPUSH
12291: LD_EXP 31
12295: PUSH
12296: LD_VAR 0 1
12300: ARRAY
12301: PUSH
12302: LD_INT 2
12304: ARRAY
12305: PPUSH
12306: CALL_OW 297
12310: PUSH
12311: LD_INT 4
12313: GREATER
12314: IFFALSE 12402
// if aggressive_pullback then
12316: LD_VAR 0 7
12320: IFFALSE 12363
// ComAgressiveMove ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) else
12322: LD_VAR 0 9
12326: PPUSH
12327: LD_EXP 31
12331: PUSH
12332: LD_VAR 0 1
12336: ARRAY
12337: PUSH
12338: LD_INT 1
12340: ARRAY
12341: PPUSH
12342: LD_EXP 31
12346: PUSH
12347: LD_VAR 0 1
12351: ARRAY
12352: PUSH
12353: LD_INT 2
12355: ARRAY
12356: PPUSH
12357: CALL_OW 114
12361: GO 12402
// ComMoveXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
12363: LD_VAR 0 9
12367: PPUSH
12368: LD_EXP 31
12372: PUSH
12373: LD_VAR 0 1
12377: ARRAY
12378: PUSH
12379: LD_INT 1
12381: ARRAY
12382: PPUSH
12383: LD_EXP 31
12387: PUSH
12388: LD_VAR 0 1
12392: ARRAY
12393: PUSH
12394: LD_INT 2
12396: ARRAY
12397: PPUSH
12398: CALL_OW 111
12402: GO 12268
12404: POP
12405: POP
// end ;
12406: LD_VAR 0 8
12410: 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 ; var under_attack ;
12411: GO 12413
12413: DISABLE
12414: LD_INT 0
12416: PPUSH
12417: PPUSH
12418: PPUSH
12419: PPUSH
12420: PPUSH
12421: PPUSH
12422: PPUSH
12423: PPUSH
12424: PPUSH
12425: PPUSH
12426: PPUSH
12427: PPUSH
12428: PPUSH
// begin side = russians ;
12429: LD_ADDR_VAR 0 1
12433: PUSH
12434: LD_EXP 3
12438: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
12439: LD_INT 35
12441: PPUSH
12442: CALL_OW 67
// for base in ai_bases do
12446: LD_ADDR_VAR 0 9
12450: PUSH
12451: LD_EXP 49
12455: PUSH
12456: FOR_IN
12457: IFFALSE 15843
// begin under_attack = BaseUnderAttack ( base , - 1 ) ;
12459: LD_ADDR_VAR 0 13
12463: PUSH
12464: LD_VAR 0 9
12468: PPUSH
12469: LD_INT 1
12471: NEG
12472: PPUSH
12473: CALL 16668 0 2
12477: ST_TO_ADDR
// if under_attack then
12478: LD_VAR 0 13
12482: IFFALSE 12529
// begin ai_vehicle_being_moved = Replace ( ai_vehicle_being_moved , base , 0 ) ;
12484: LD_ADDR_EXP 36
12488: PUSH
12489: LD_EXP 36
12493: PPUSH
12494: LD_VAR 0 9
12498: PPUSH
12499: LD_INT 0
12501: PPUSH
12502: CALL_OW 1
12506: ST_TO_ADDR
// ai_vehicles_having_been_moved = Replace ( ai_vehicles_having_been_moved , base , [ ] ) ;
12507: LD_ADDR_EXP 59
12511: PUSH
12512: LD_EXP 59
12516: PPUSH
12517: LD_VAR 0 9
12521: PPUSH
12522: EMPTY
12523: PPUSH
12524: CALL_OW 1
12528: ST_TO_ADDR
// end ; engineers_list = ai_engineers [ base ] diff ai_heal_these_humans [ base ] ;
12529: LD_ADDR_VAR 0 3
12533: PUSH
12534: LD_EXP 18
12538: PUSH
12539: LD_VAR 0 9
12543: ARRAY
12544: PUSH
12545: LD_EXP 33
12549: PUSH
12550: LD_VAR 0 9
12554: ARRAY
12555: DIFF
12556: ST_TO_ADDR
// apemen_engineers_list = ai_apemen_engineers [ base ] diff ai_heal_these_humans [ base ] ;
12557: LD_ADDR_VAR 0 10
12561: PUSH
12562: LD_EXP 53
12566: PUSH
12567: LD_VAR 0 9
12571: ARRAY
12572: PUSH
12573: LD_EXP 33
12577: PUSH
12578: LD_VAR 0 9
12582: ARRAY
12583: DIFF
12584: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
12585: LD_ADDR_VAR 0 4
12589: PUSH
12590: LD_EXP 33
12594: PUSH
12595: LD_VAR 0 9
12599: ARRAY
12600: ST_TO_ADDR
// humans_list = engineers_list ^ apemen_engineers_list ;
12601: LD_ADDR_VAR 0 11
12605: PUSH
12606: LD_VAR 0 3
12610: PUSH
12611: LD_VAR 0 10
12615: ADD
12616: ST_TO_ADDR
// i = 1 ;
12617: LD_ADDR_VAR 0 2
12621: PUSH
12622: LD_INT 1
12624: ST_TO_ADDR
// while i <= humans_list do
12625: LD_VAR 0 2
12629: PUSH
12630: LD_VAR 0 11
12634: LESSEQUAL
12635: IFFALSE 12774
// begin if GetLives ( humans_list [ i ] ) <= 700 then
12637: LD_VAR 0 11
12641: PUSH
12642: LD_VAR 0 2
12646: ARRAY
12647: PPUSH
12648: CALL_OW 256
12652: PUSH
12653: LD_INT 700
12655: LESSEQUAL
12656: IFFALSE 12758
// begin temp_list = temp_list ^ humans_list [ i ] ;
12658: LD_ADDR_VAR 0 4
12662: PUSH
12663: LD_VAR 0 4
12667: PUSH
12668: LD_VAR 0 11
12672: PUSH
12673: LD_VAR 0 2
12677: ARRAY
12678: ADD
12679: ST_TO_ADDR
// engineers_list = engineers_list diff humans_list [ i ] ;
12680: LD_ADDR_VAR 0 3
12684: PUSH
12685: LD_VAR 0 3
12689: PUSH
12690: LD_VAR 0 11
12694: PUSH
12695: LD_VAR 0 2
12699: ARRAY
12700: DIFF
12701: ST_TO_ADDR
// apemen_engineers_list = apemen_engineers_list diff humans_list [ i ] ;
12702: LD_ADDR_VAR 0 10
12706: PUSH
12707: LD_VAR 0 10
12711: PUSH
12712: LD_VAR 0 11
12716: PUSH
12717: LD_VAR 0 2
12721: ARRAY
12722: DIFF
12723: ST_TO_ADDR
// humans_list = Delete ( humans_list , i ) ;
12724: LD_ADDR_VAR 0 11
12728: PUSH
12729: LD_VAR 0 11
12733: PPUSH
12734: LD_VAR 0 2
12738: PPUSH
12739: CALL_OW 3
12743: ST_TO_ADDR
// i = i - 1 ;
12744: LD_ADDR_VAR 0 2
12748: PUSH
12749: LD_VAR 0 2
12753: PUSH
12754: LD_INT 1
12756: MINUS
12757: ST_TO_ADDR
// end ; i = i + 1 ;
12758: LD_ADDR_VAR 0 2
12762: PUSH
12763: LD_VAR 0 2
12767: PUSH
12768: LD_INT 1
12770: PLUS
12771: ST_TO_ADDR
// end ;
12772: GO 12625
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
12774: LD_ADDR_EXP 33
12778: PUSH
12779: LD_EXP 33
12783: PPUSH
12784: LD_VAR 0 9
12788: PPUSH
12789: LD_VAR 0 4
12793: PPUSH
12794: CALL_OW 1
12798: ST_TO_ADDR
// if engineers_list = 0 and apemen_engineers_list = 0 then
12799: LD_VAR 0 3
12803: PUSH
12804: LD_INT 0
12806: EQUAL
12807: PUSH
12808: LD_VAR 0 10
12812: PUSH
12813: LD_INT 0
12815: EQUAL
12816: AND
12817: IFFALSE 12821
// continue ;
12819: GO 12456
// temp_list_2 = UnitFilter ( engineers_list , [ f_class , class_engineer ] ) ;
12821: LD_ADDR_VAR 0 8
12825: PUSH
12826: LD_VAR 0 3
12830: PPUSH
12831: LD_INT 25
12833: PUSH
12834: LD_INT 2
12836: PUSH
12837: EMPTY
12838: LIST
12839: LIST
12840: PPUSH
12841: CALL_OW 72
12845: ST_TO_ADDR
// if ai_captured_buildings [ base ] > 0 and temp_list_2 > 0 then
12846: LD_EXP 61
12850: PUSH
12851: LD_VAR 0 9
12855: ARRAY
12856: PUSH
12857: LD_INT 0
12859: GREATER
12860: PUSH
12861: LD_VAR 0 8
12865: PUSH
12866: LD_INT 0
12868: GREATER
12869: AND
12870: IFFALSE 13141
// begin temp_list = [ ] ;
12872: LD_ADDR_VAR 0 4
12876: PUSH
12877: EMPTY
12878: ST_TO_ADDR
// for i in ai_captured_buildings [ base ] do
12879: LD_ADDR_VAR 0 2
12883: PUSH
12884: LD_EXP 61
12888: PUSH
12889: LD_VAR 0 9
12893: ARRAY
12894: PUSH
12895: FOR_IN
12896: IFFALSE 12952
// if GetBType ( i ) in [ b_depot , b_warehouse ] then
12898: LD_VAR 0 2
12902: PPUSH
12903: CALL_OW 266
12907: PUSH
12908: LD_INT 0
12910: PUSH
12911: LD_INT 1
12913: PUSH
12914: EMPTY
12915: LIST
12916: LIST
12917: IN
12918: IFFALSE 12936
// temp_list = temp_list ^ 1 else
12920: LD_ADDR_VAR 0 4
12924: PUSH
12925: LD_VAR 0 4
12929: PUSH
12930: LD_INT 1
12932: ADD
12933: ST_TO_ADDR
12934: GO 12950
// temp_list = temp_list ^ 0 ;
12936: LD_ADDR_VAR 0 4
12940: PUSH
12941: LD_VAR 0 4
12945: PUSH
12946: LD_INT 0
12948: ADD
12949: ST_TO_ADDR
12950: GO 12895
12952: POP
12953: POP
// temp_list = SortListByListDesc ( ai_captured_buildings [ base ] , temp_list ) ;
12954: LD_ADDR_VAR 0 4
12958: PUSH
12959: LD_EXP 61
12963: PUSH
12964: LD_VAR 0 9
12968: ARRAY
12969: PPUSH
12970: LD_VAR 0 4
12974: PPUSH
12975: CALL_OW 77
12979: ST_TO_ADDR
// temp_list_2 = GetHumansOutOfUnits ( temp_list_2 ) ;
12980: LD_ADDR_VAR 0 8
12984: PUSH
12985: LD_VAR 0 8
12989: PPUSH
12990: CALL 16563 0 1
12994: ST_TO_ADDR
// if temp_list_2 > 0 then
12995: LD_VAR 0 8
12999: PUSH
13000: LD_INT 0
13002: GREATER
13003: IFFALSE 13119
// begin temp_list_2 = SortListByListDesc ( temp_list_2 , temp_list_2 ) ;
13005: LD_ADDR_VAR 0 8
13009: PUSH
13010: LD_VAR 0 8
13014: PPUSH
13015: LD_VAR 0 8
13019: PPUSH
13020: CALL_OW 77
13024: ST_TO_ADDR
// SetTaskList ( temp_list_2 [ 1 ] , [ [ e , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) , temp_list [ 1 ] , 0 , 0 , 0 ] ] ) ;
13025: LD_VAR 0 8
13029: PUSH
13030: LD_INT 1
13032: ARRAY
13033: PPUSH
13034: LD_STRING e
13036: PUSH
13037: LD_VAR 0 4
13041: PUSH
13042: LD_INT 1
13044: ARRAY
13045: PPUSH
13046: CALL_OW 250
13050: PUSH
13051: LD_VAR 0 4
13055: PUSH
13056: LD_INT 1
13058: ARRAY
13059: PPUSH
13060: CALL_OW 251
13064: PUSH
13065: LD_VAR 0 4
13069: PUSH
13070: LD_INT 1
13072: ARRAY
13073: PUSH
13074: LD_INT 0
13076: PUSH
13077: LD_INT 0
13079: PUSH
13080: LD_INT 0
13082: PUSH
13083: EMPTY
13084: LIST
13085: LIST
13086: LIST
13087: LIST
13088: LIST
13089: LIST
13090: LIST
13091: PUSH
13092: EMPTY
13093: LIST
13094: PPUSH
13095: CALL_OW 446
// engineers_list = engineers_list diff temp_list_2 [ 1 ] ;
13099: LD_ADDR_VAR 0 3
13103: PUSH
13104: LD_VAR 0 3
13108: PUSH
13109: LD_VAR 0 8
13113: PUSH
13114: LD_INT 1
13116: ARRAY
13117: DIFF
13118: ST_TO_ADDR
// end ; if engineers_list = 0 and apemen_engineers_list = 0 then
13119: LD_VAR 0 3
13123: PUSH
13124: LD_INT 0
13126: EQUAL
13127: PUSH
13128: LD_VAR 0 10
13132: PUSH
13133: LD_INT 0
13135: EQUAL
13136: AND
13137: IFFALSE 13141
// continue ;
13139: GO 12456
// end ; i = 1 ;
13141: LD_ADDR_VAR 0 2
13145: PUSH
13146: LD_INT 1
13148: ST_TO_ADDR
// buildings_list = [ ] ;
13149: LD_ADDR_VAR 0 5
13153: PUSH
13154: EMPTY
13155: ST_TO_ADDR
// repeat case i of 1 :
13156: LD_VAR 0 2
13160: PUSH
13161: LD_INT 1
13163: DOUBLE
13164: EQUAL
13165: IFTRUE 13169
13167: GO 13206
13169: POP
// buildings_list = UnitFilter ( ai_all_buildings [ base ] , [ f_not , [ f_ok ] ] ) ; 2 :
13170: LD_ADDR_VAR 0 5
13174: PUSH
13175: LD_EXP 34
13179: PUSH
13180: LD_VAR 0 9
13184: ARRAY
13185: PPUSH
13186: LD_INT 3
13188: PUSH
13189: LD_INT 50
13191: PUSH
13192: EMPTY
13193: LIST
13194: PUSH
13195: EMPTY
13196: LIST
13197: LIST
13198: PPUSH
13199: CALL_OW 72
13203: ST_TO_ADDR
13204: GO 13256
13206: LD_INT 2
13208: DOUBLE
13209: EQUAL
13210: IFTRUE 13214
13212: GO 13255
13214: POP
// buildings_list = UnitFilter ( ai_all_buildings [ base ] , [ f_not , [ f_lives , 1000 ] ] ) ; end ;
13215: LD_ADDR_VAR 0 5
13219: PUSH
13220: LD_EXP 34
13224: PUSH
13225: LD_VAR 0 9
13229: ARRAY
13230: PPUSH
13231: LD_INT 3
13233: PUSH
13234: LD_INT 24
13236: PUSH
13237: LD_INT 1000
13239: PUSH
13240: EMPTY
13241: LIST
13242: LIST
13243: PUSH
13244: EMPTY
13245: LIST
13246: LIST
13247: PPUSH
13248: CALL_OW 72
13252: ST_TO_ADDR
13253: GO 13256
13255: POP
// i = i + 1 ;
13256: LD_ADDR_VAR 0 2
13260: PUSH
13261: LD_VAR 0 2
13265: PUSH
13266: LD_INT 1
13268: PLUS
13269: ST_TO_ADDR
// until buildings_list > 0 or i > 2 ;
13270: LD_VAR 0 5
13274: PUSH
13275: LD_INT 0
13277: GREATER
13278: PUSH
13279: LD_VAR 0 2
13283: PUSH
13284: LD_INT 2
13286: GREATER
13287: OR
13288: IFFALSE 13156
// if buildings_list > 0 then
13290: LD_VAR 0 5
13294: PUSH
13295: LD_INT 0
13297: GREATER
13298: IFFALSE 13485
// begin humans_list = engineers_list ^ apemen_engineers_list ;
13300: LD_ADDR_VAR 0 11
13304: PUSH
13305: LD_VAR 0 3
13309: PUSH
13310: LD_VAR 0 10
13314: ADD
13315: ST_TO_ADDR
// humans_list = GetHumansOutOfUnits ( humans_list ) ;
13316: LD_ADDR_VAR 0 11
13320: PUSH
13321: LD_VAR 0 11
13325: PPUSH
13326: CALL 16563 0 1
13330: ST_TO_ADDR
// repeat i = 1 ;
13331: LD_ADDR_VAR 0 2
13335: PUSH
13336: LD_INT 1
13338: ST_TO_ADDR
// while i <= buildings_list do
13339: LD_VAR 0 2
13343: PUSH
13344: LD_VAR 0 5
13348: LESSEQUAL
13349: IFFALSE 13473
// begin if humans_list = 0 then
13351: LD_VAR 0 11
13355: PUSH
13356: LD_INT 0
13358: EQUAL
13359: IFFALSE 13363
// break ;
13361: GO 13473
// temp_unit = NearestUnitToUnit ( humans_list , buildings_list [ i ] ) ;
13363: LD_ADDR_VAR 0 6
13367: PUSH
13368: LD_VAR 0 11
13372: PPUSH
13373: LD_VAR 0 5
13377: PUSH
13378: LD_VAR 0 2
13382: ARRAY
13383: PPUSH
13384: CALL_OW 74
13388: ST_TO_ADDR
// ComRepairBuilding ( temp_unit , buildings_list [ i ] ) ;
13389: LD_VAR 0 6
13393: PPUSH
13394: LD_VAR 0 5
13398: PUSH
13399: LD_VAR 0 2
13403: ARRAY
13404: PPUSH
13405: CALL_OW 130
// humans_list = humans_list diff temp_unit ;
13409: LD_ADDR_VAR 0 11
13413: PUSH
13414: LD_VAR 0 11
13418: PUSH
13419: LD_VAR 0 6
13423: DIFF
13424: ST_TO_ADDR
// engineers_list = engineers_list diff temp_unit ;
13425: LD_ADDR_VAR 0 3
13429: PUSH
13430: LD_VAR 0 3
13434: PUSH
13435: LD_VAR 0 6
13439: DIFF
13440: ST_TO_ADDR
// apemen_engineers_list = apemen_engineers_list diff temp_unit ;
13441: LD_ADDR_VAR 0 10
13445: PUSH
13446: LD_VAR 0 10
13450: PUSH
13451: LD_VAR 0 6
13455: DIFF
13456: ST_TO_ADDR
// i = i + 1 ;
13457: LD_ADDR_VAR 0 2
13461: PUSH
13462: LD_VAR 0 2
13466: PUSH
13467: LD_INT 1
13469: PLUS
13470: ST_TO_ADDR
// end ;
13471: GO 13339
// until humans_list = 0 ;
13473: LD_VAR 0 11
13477: PUSH
13478: LD_INT 0
13480: EQUAL
13481: IFFALSE 13331
// continue ;
13483: GO 12456
// end ; if not under_attack then
13485: LD_VAR 0 13
13489: NOT
13490: IFFALSE 15770
// begin if ai_building_under_construction [ base ] > 0 then
13492: LD_EXP 32
13496: PUSH
13497: LD_VAR 0 9
13501: ARRAY
13502: PUSH
13503: LD_INT 0
13505: GREATER
13506: IFFALSE 13619
// if BuildingStatus ( ai_building_under_construction [ base ] ) = bs_build then
13508: LD_EXP 32
13512: PUSH
13513: LD_VAR 0 9
13517: ARRAY
13518: PPUSH
13519: CALL_OW 461
13523: PUSH
13524: LD_INT 1
13526: EQUAL
13527: IFFALSE 13581
// begin for i in GetHumansOutOfUnits ( engineers_list ^ apemen_engineers_list ) do
13529: LD_ADDR_VAR 0 2
13533: PUSH
13534: LD_VAR 0 3
13538: PUSH
13539: LD_VAR 0 10
13543: ADD
13544: PPUSH
13545: CALL 16563 0 1
13549: PUSH
13550: FOR_IN
13551: IFFALSE 13575
// ComRepairBuilding ( i , ai_building_under_construction [ base ] ) ;
13553: LD_VAR 0 2
13557: PPUSH
13558: LD_EXP 32
13562: PUSH
13563: LD_VAR 0 9
13567: ARRAY
13568: PPUSH
13569: CALL_OW 130
13573: GO 13550
13575: POP
13576: POP
// continue ;
13577: GO 12456
// end else
13579: GO 13619
// begin ComCancel ( ai_building_under_construction [ base ] ) ;
13581: LD_EXP 32
13585: PUSH
13586: LD_VAR 0 9
13590: ARRAY
13591: PPUSH
13592: CALL_OW 127
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
13596: LD_ADDR_EXP 32
13600: PUSH
13601: LD_EXP 32
13605: PPUSH
13606: LD_VAR 0 9
13610: PPUSH
13611: LD_INT 0
13613: PPUSH
13614: CALL_OW 1
13618: ST_TO_ADDR
// end ; if ( ai_all_buildings [ base ] < ai_buildings_locations [ base ] and rus_num_building_rebuild > 0 ) or ai_upcoming_building_data [ base ] > 0 then
13619: LD_EXP 34
13623: PUSH
13624: LD_VAR 0 9
13628: ARRAY
13629: PUSH
13630: LD_EXP 27
13634: PUSH
13635: LD_VAR 0 9
13639: ARRAY
13640: LESS
13641: PUSH
13642: LD_EXP 65
13646: PUSH
13647: LD_INT 0
13649: GREATER
13650: AND
13651: PUSH
13652: LD_EXP 37
13656: PUSH
13657: LD_VAR 0 9
13661: ARRAY
13662: PUSH
13663: LD_INT 0
13665: GREATER
13666: OR
13667: IFFALSE 15582
// begin if ai_upcoming_building_data [ base ] = 0 then
13669: LD_EXP 37
13673: PUSH
13674: LD_VAR 0 9
13678: ARRAY
13679: PUSH
13680: LD_INT 0
13682: EQUAL
13683: IFFALSE 14092
// begin temp_list = [ ] ;
13685: LD_ADDR_VAR 0 4
13689: PUSH
13690: EMPTY
13691: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
13692: LD_ADDR_VAR 0 2
13696: PUSH
13697: LD_EXP 27
13701: PUSH
13702: LD_VAR 0 9
13706: ARRAY
13707: PUSH
13708: FOR_IN
13709: IFFALSE 13759
// if GetBType ( HexInfo ( i [ 1 ] , i [ 2 ] ) ) = - 1 then
13711: LD_VAR 0 2
13715: PUSH
13716: LD_INT 1
13718: ARRAY
13719: PPUSH
13720: LD_VAR 0 2
13724: PUSH
13725: LD_INT 2
13727: ARRAY
13728: PPUSH
13729: CALL_OW 428
13733: PPUSH
13734: CALL_OW 266
13738: PUSH
13739: LD_INT 1
13741: NEG
13742: EQUAL
13743: IFFALSE 13757
// begin temp_list = i ;
13745: LD_ADDR_VAR 0 4
13749: PUSH
13750: LD_VAR 0 2
13754: ST_TO_ADDR
// break ;
13755: GO 13759
// end ;
13757: GO 13708
13759: POP
13760: POP
// if temp_list > 0 then
13761: LD_VAR 0 4
13765: PUSH
13766: LD_INT 0
13768: GREATER
13769: IFFALSE 14092
// begin if temp_list [ 4 ] = b_bunker and GetBaseNation ( base ) in [ nation_american , nation_russian ] then
13771: LD_VAR 0 4
13775: PUSH
13776: LD_INT 4
13778: ARRAY
13779: PUSH
13780: LD_INT 32
13782: EQUAL
13783: PUSH
13784: LD_VAR 0 9
13788: PPUSH
13789: CALL 10665 0 1
13793: PUSH
13794: LD_INT 1
13796: PUSH
13797: LD_INT 3
13799: PUSH
13800: EMPTY
13801: LIST
13802: LIST
13803: IN
13804: AND
13805: IFFALSE 14067
// begin k = 0 ;
13807: LD_ADDR_VAR 0 12
13811: PUSH
13812: LD_INT 0
13814: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
13815: LD_ADDR_VAR 0 2
13819: PUSH
13820: LD_EXP 27
13824: PUSH
13825: LD_VAR 0 9
13829: ARRAY
13830: PUSH
13831: FOR_IN
13832: IFFALSE 13883
// if i [ 4 ] in [ b_breastwork , b_bunker , b_armoury , b_barracks , b_fort ] then
13834: LD_VAR 0 2
13838: PUSH
13839: LD_INT 4
13841: ARRAY
13842: PUSH
13843: LD_INT 31
13845: PUSH
13846: LD_INT 32
13848: PUSH
13849: LD_INT 4
13851: PUSH
13852: LD_INT 5
13854: PUSH
13855: LD_INT 35
13857: PUSH
13858: EMPTY
13859: LIST
13860: LIST
13861: LIST
13862: LIST
13863: LIST
13864: IN
13865: IFFALSE 13881
// k = k + 1 ;
13867: LD_ADDR_VAR 0 12
13871: PUSH
13872: LD_VAR 0 12
13876: PUSH
13877: LD_INT 1
13879: PLUS
13880: ST_TO_ADDR
13881: GO 13831
13883: POP
13884: POP
// if k > ai_soldiers [ base ] then
13885: LD_VAR 0 12
13889: PUSH
13890: LD_EXP 17
13894: PUSH
13895: LD_VAR 0 9
13899: ARRAY
13900: GREATER
13901: IFFALSE 14067
// begin for i = 1 to ai_buildings_locations [ base ] do
13903: LD_ADDR_VAR 0 2
13907: PUSH
13908: DOUBLE
13909: LD_INT 1
13911: DEC
13912: ST_TO_ADDR
13913: LD_EXP 27
13917: PUSH
13918: LD_VAR 0 9
13922: ARRAY
13923: PUSH
13924: FOR_TO
13925: IFFALSE 14044
// if ai_buildings_locations [ base ] [ i ] = temp_list then
13927: LD_EXP 27
13931: PUSH
13932: LD_VAR 0 9
13936: ARRAY
13937: PUSH
13938: LD_VAR 0 2
13942: ARRAY
13943: PUSH
13944: LD_VAR 0 4
13948: EQUAL
13949: IFFALSE 14042
// begin temp_list_2 = Replace ( ai_buildings_locations [ base ] [ i ] , 4 , b_turret ) ;
13951: LD_ADDR_VAR 0 8
13955: PUSH
13956: LD_EXP 27
13960: PUSH
13961: LD_VAR 0 9
13965: ARRAY
13966: PUSH
13967: LD_VAR 0 2
13971: ARRAY
13972: PPUSH
13973: LD_INT 4
13975: PPUSH
13976: LD_INT 33
13978: PPUSH
13979: CALL_OW 1
13983: ST_TO_ADDR
// temp_list_2 = Replace ( ai_buildings_locations [ base ] , i , temp_list_2 ) ;
13984: LD_ADDR_VAR 0 8
13988: PUSH
13989: LD_EXP 27
13993: PUSH
13994: LD_VAR 0 9
13998: ARRAY
13999: PPUSH
14000: LD_VAR 0 2
14004: PPUSH
14005: LD_VAR 0 8
14009: PPUSH
14010: CALL_OW 1
14014: ST_TO_ADDR
// ai_buildings_locations = Replace ( ai_buildings_locations , base , temp_list_2 ) ;
14015: LD_ADDR_EXP 27
14019: PUSH
14020: LD_EXP 27
14024: PPUSH
14025: LD_VAR 0 9
14029: PPUSH
14030: LD_VAR 0 8
14034: PPUSH
14035: CALL_OW 1
14039: ST_TO_ADDR
// break ;
14040: GO 14044
// end ;
14042: GO 13924
14044: POP
14045: POP
// temp_list = Replace ( temp_list , 4 , b_turret ) ;
14046: LD_ADDR_VAR 0 4
14050: PUSH
14051: LD_VAR 0 4
14055: PPUSH
14056: LD_INT 4
14058: PPUSH
14059: LD_INT 33
14061: PPUSH
14062: CALL_OW 1
14066: ST_TO_ADDR
// end ; end ; ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , temp_list ) ;
14067: LD_ADDR_EXP 37
14071: PUSH
14072: LD_EXP 37
14076: PPUSH
14077: LD_VAR 0 9
14081: PPUSH
14082: LD_VAR 0 4
14086: PPUSH
14087: CALL_OW 1
14091: ST_TO_ADDR
// end ; end ; if ai_upcoming_building_data [ base ] > 0 then
14092: LD_EXP 37
14096: PUSH
14097: LD_VAR 0 9
14101: ARRAY
14102: PUSH
14103: LD_INT 0
14105: GREATER
14106: IFFALSE 15582
// begin if ai_building_constructor [ base ] = 0 then
14108: LD_EXP 35
14112: PUSH
14113: LD_VAR 0 9
14117: ARRAY
14118: PUSH
14119: LD_INT 0
14121: EQUAL
14122: IFFALSE 14248
// begin temp_list_2 = UnitFilter ( ai_engineers [ base ] , [ f_class , class_engineer ] ) ;
14124: LD_ADDR_VAR 0 8
14128: PUSH
14129: LD_EXP 18
14133: PUSH
14134: LD_VAR 0 9
14138: ARRAY
14139: PPUSH
14140: LD_INT 25
14142: PUSH
14143: LD_INT 2
14145: PUSH
14146: EMPTY
14147: LIST
14148: LIST
14149: PPUSH
14150: CALL_OW 72
14154: ST_TO_ADDR
// if temp_list_2 > 0 then
14155: LD_VAR 0 8
14159: PUSH
14160: LD_INT 0
14162: GREATER
14163: IFFALSE 14248
// begin temp_list = [ ] ;
14165: LD_ADDR_VAR 0 4
14169: PUSH
14170: EMPTY
14171: ST_TO_ADDR
// for i in temp_list_2 do
14172: LD_ADDR_VAR 0 2
14176: PUSH
14177: LD_VAR 0 8
14181: PUSH
14182: FOR_IN
14183: IFFALSE 14211
// temp_list = temp_list ^ GetSkill ( i , skill_engineering ) ;
14185: LD_ADDR_VAR 0 4
14189: PUSH
14190: LD_VAR 0 4
14194: PUSH
14195: LD_VAR 0 2
14199: PPUSH
14200: LD_INT 2
14202: PPUSH
14203: CALL_OW 259
14207: ADD
14208: ST_TO_ADDR
14209: GO 14182
14211: POP
14212: POP
// ai_building_constructor = Replace ( ai_building_constructor , base , BestFromListByList ( temp_list_2 , temp_list ) ) ;
14213: LD_ADDR_EXP 35
14217: PUSH
14218: LD_EXP 35
14222: PPUSH
14223: LD_VAR 0 9
14227: PPUSH
14228: LD_VAR 0 8
14232: PPUSH
14233: LD_VAR 0 4
14237: PPUSH
14238: CALL_OW 79
14242: PPUSH
14243: CALL_OW 1
14247: ST_TO_ADDR
// end ; end ; if ai_building_constructor [ base ] in engineers_list and ai_building_constructor [ base ] > 0 then
14248: LD_EXP 35
14252: PUSH
14253: LD_VAR 0 9
14257: ARRAY
14258: PUSH
14259: LD_VAR 0 3
14263: IN
14264: PUSH
14265: LD_EXP 35
14269: PUSH
14270: LD_VAR 0 9
14274: ARRAY
14275: PUSH
14276: LD_INT 0
14278: GREATER
14279: AND
14280: IFFALSE 15582
// begin engineers_list = engineers_list diff ai_building_constructor [ base ] ;
14282: LD_ADDR_VAR 0 3
14286: PUSH
14287: LD_VAR 0 3
14291: PUSH
14292: LD_EXP 35
14296: PUSH
14297: LD_VAR 0 9
14301: ARRAY
14302: DIFF
14303: ST_TO_ADDR
// away_dist = 7 ;
14304: LD_ADDR_VAR 0 7
14308: PUSH
14309: LD_INT 7
14311: ST_TO_ADDR
// if ai_vehicle_being_moved [ base ] = 0 then
14312: LD_EXP 36
14316: PUSH
14317: LD_VAR 0 9
14321: ARRAY
14322: PUSH
14323: LD_INT 0
14325: EQUAL
14326: IFFALSE 15324
// begin temp_list = UnitFilter ( ai_vehicles_defend [ base ] ^ ai_cargo_bay [ base ] , [ [ f_control , control_manual ] , [ f_empty ] , [ f_distxy , ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] , away_dist ] ] ) ;
14328: LD_ADDR_VAR 0 4
14332: PUSH
14333: LD_EXP 28
14337: PUSH
14338: LD_VAR 0 9
14342: ARRAY
14343: PUSH
14344: LD_EXP 51
14348: PUSH
14349: LD_VAR 0 9
14353: ARRAY
14354: ADD
14355: PPUSH
14356: LD_INT 33
14358: PUSH
14359: LD_INT 1
14361: PUSH
14362: EMPTY
14363: LIST
14364: LIST
14365: PUSH
14366: LD_INT 58
14368: PUSH
14369: EMPTY
14370: LIST
14371: PUSH
14372: LD_INT 92
14374: PUSH
14375: LD_EXP 37
14379: PUSH
14380: LD_VAR 0 9
14384: ARRAY
14385: PUSH
14386: LD_INT 1
14388: ARRAY
14389: PUSH
14390: LD_EXP 37
14394: PUSH
14395: LD_VAR 0 9
14399: ARRAY
14400: PUSH
14401: LD_INT 2
14403: ARRAY
14404: PUSH
14405: LD_VAR 0 7
14409: PUSH
14410: EMPTY
14411: LIST
14412: LIST
14413: LIST
14414: LIST
14415: PUSH
14416: EMPTY
14417: LIST
14418: LIST
14419: LIST
14420: PPUSH
14421: CALL_OW 72
14425: ST_TO_ADDR
// if temp_list > 0 then
14426: LD_VAR 0 4
14430: PUSH
14431: LD_INT 0
14433: GREATER
14434: IFFALSE 14518
// begin ai_vehicle_being_moved = Replace ( ai_vehicle_being_moved , base , temp_list [ 1 ] ) ;
14436: LD_ADDR_EXP 36
14440: PUSH
14441: LD_EXP 36
14445: PPUSH
14446: LD_VAR 0 9
14450: PPUSH
14451: LD_VAR 0 4
14455: PUSH
14456: LD_INT 1
14458: ARRAY
14459: PPUSH
14460: CALL_OW 1
14464: ST_TO_ADDR
// temp_list_2 = ai_vehicles_having_been_moved [ base ] ^ temp_list [ 1 ] ;
14465: LD_ADDR_VAR 0 8
14469: PUSH
14470: LD_EXP 59
14474: PUSH
14475: LD_VAR 0 9
14479: ARRAY
14480: PUSH
14481: LD_VAR 0 4
14485: PUSH
14486: LD_INT 1
14488: ARRAY
14489: ADD
14490: ST_TO_ADDR
// ai_vehicles_having_been_moved = Replace ( ai_vehicles_having_been_moved , base , temp_list_2 ) ;
14491: LD_ADDR_EXP 59
14495: PUSH
14496: LD_EXP 59
14500: PPUSH
14501: LD_VAR 0 9
14505: PPUSH
14506: LD_VAR 0 8
14510: PPUSH
14511: CALL_OW 1
14515: ST_TO_ADDR
// end else
14516: GO 15322
// case GetType ( IsInUnit ( ai_building_constructor [ base ] ) ) of unit_building :
14518: LD_EXP 35
14522: PUSH
14523: LD_VAR 0 9
14527: ARRAY
14528: PPUSH
14529: CALL_OW 310
14533: PPUSH
14534: CALL_OW 247
14538: PUSH
14539: LD_INT 3
14541: DOUBLE
14542: EQUAL
14543: IFTRUE 14547
14545: GO 14565
14547: POP
// ComExitBuilding ( ai_building_constructor [ base ] ) ; unit_vehicle :
14548: LD_EXP 35
14552: PUSH
14553: LD_VAR 0 9
14557: ARRAY
14558: PPUSH
14559: CALL_OW 122
14563: GO 15322
14565: LD_INT 2
14567: DOUBLE
14568: EQUAL
14569: IFTRUE 14573
14571: GO 14591
14573: POP
// ComExitVehicle ( ai_building_constructor [ base ] ) ; else
14574: LD_EXP 35
14578: PUSH
14579: LD_VAR 0 9
14583: ARRAY
14584: PPUSH
14585: CALL_OW 121
14589: GO 15322
14591: POP
// case GetBType ( HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ) of - 1 :
14592: LD_EXP 37
14596: PUSH
14597: LD_VAR 0 9
14601: ARRAY
14602: PUSH
14603: LD_INT 1
14605: ARRAY
14606: PPUSH
14607: LD_EXP 37
14611: PUSH
14612: LD_VAR 0 9
14616: ARRAY
14617: PUSH
14618: LD_INT 2
14620: ARRAY
14621: PPUSH
14622: CALL_OW 428
14626: PPUSH
14627: CALL_OW 266
14631: PUSH
14632: LD_INT 1
14634: NEG
14635: DOUBLE
14636: EQUAL
14637: IFTRUE 14641
14639: GO 14827
14641: POP
// begin case ai_upcoming_building_data [ base ] [ 4 ] of b_warehouse :
14642: LD_EXP 37
14646: PUSH
14647: LD_VAR 0 9
14651: ARRAY
14652: PUSH
14653: LD_INT 4
14655: ARRAY
14656: PUSH
14657: LD_INT 1
14659: DOUBLE
14660: EQUAL
14661: IFTRUE 14665
14663: GO 14676
14665: POP
// i = b_depot ; b_factory :
14666: LD_ADDR_VAR 0 2
14670: PUSH
14671: LD_INT 0
14673: ST_TO_ADDR
14674: GO 14760
14676: LD_INT 3
14678: DOUBLE
14679: EQUAL
14680: IFTRUE 14684
14682: GO 14695
14684: POP
// i = b_workshop ; b_lab_half , b_lab_full :
14685: LD_ADDR_VAR 0 2
14689: PUSH
14690: LD_INT 2
14692: ST_TO_ADDR
14693: GO 14760
14695: LD_INT 7
14697: DOUBLE
14698: EQUAL
14699: IFTRUE 14709
14701: LD_INT 8
14703: DOUBLE
14704: EQUAL
14705: IFTRUE 14709
14707: GO 14720
14709: POP
// i = b_lab ; b_barracks :
14710: LD_ADDR_VAR 0 2
14714: PUSH
14715: LD_INT 6
14717: ST_TO_ADDR
14718: GO 14760
14720: LD_INT 5
14722: DOUBLE
14723: EQUAL
14724: IFTRUE 14728
14726: GO 14739
14728: POP
// i = b_armoury ; else
14729: LD_ADDR_VAR 0 2
14733: PUSH
14734: LD_INT 4
14736: ST_TO_ADDR
14737: GO 14760
14739: POP
// i = ai_upcoming_building_data [ base ] [ 4 ] ; end ;
14740: LD_ADDR_VAR 0 2
14744: PUSH
14745: LD_EXP 37
14749: PUSH
14750: LD_VAR 0 9
14754: ARRAY
14755: PUSH
14756: LD_INT 4
14758: ARRAY
14759: 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 ] ) ;
14760: LD_EXP 35
14764: PUSH
14765: LD_VAR 0 9
14769: ARRAY
14770: PPUSH
14771: LD_VAR 0 2
14775: PPUSH
14776: LD_EXP 37
14780: PUSH
14781: LD_VAR 0 9
14785: ARRAY
14786: PUSH
14787: LD_INT 1
14789: ARRAY
14790: PPUSH
14791: LD_EXP 37
14795: PUSH
14796: LD_VAR 0 9
14800: ARRAY
14801: PUSH
14802: LD_INT 2
14804: ARRAY
14805: PPUSH
14806: LD_EXP 37
14810: PUSH
14811: LD_VAR 0 9
14815: ARRAY
14816: PUSH
14817: LD_INT 3
14819: ARRAY
14820: PPUSH
14821: CALL_OW 145
// end ; b_depot :
14825: GO 15322
14827: LD_INT 0
14829: DOUBLE
14830: EQUAL
14831: IFTRUE 14835
14833: GO 14884
14835: POP
// begin ComUpgrade ( ai_depot [ base ] ) ;
14836: LD_EXP 23
14840: PUSH
14841: LD_VAR 0 9
14845: ARRAY
14846: PPUSH
14847: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , ai_depot [ base ] ) ;
14851: LD_ADDR_EXP 32
14855: PUSH
14856: LD_EXP 32
14860: PPUSH
14861: LD_VAR 0 9
14865: PPUSH
14866: LD_EXP 23
14870: PUSH
14871: LD_VAR 0 9
14875: ARRAY
14876: PPUSH
14877: CALL_OW 1
14881: ST_TO_ADDR
// end ; b_workshop :
14882: GO 15322
14884: LD_INT 2
14886: DOUBLE
14887: EQUAL
14888: IFTRUE 14892
14890: GO 14969
14892: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
14893: LD_ADDR_VAR 0 6
14897: PUSH
14898: LD_EXP 37
14902: PUSH
14903: LD_VAR 0 9
14907: ARRAY
14908: PUSH
14909: LD_INT 1
14911: ARRAY
14912: PPUSH
14913: LD_EXP 37
14917: PUSH
14918: LD_VAR 0 9
14922: ARRAY
14923: PUSH
14924: LD_INT 2
14926: ARRAY
14927: PPUSH
14928: CALL_OW 428
14932: ST_TO_ADDR
// ComUpgrade ( temp_unit ) ;
14933: LD_VAR 0 6
14937: PPUSH
14938: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
14942: LD_ADDR_EXP 32
14946: PUSH
14947: LD_EXP 32
14951: PPUSH
14952: LD_VAR 0 9
14956: PPUSH
14957: LD_VAR 0 6
14961: PPUSH
14962: CALL_OW 1
14966: ST_TO_ADDR
// end ; b_lab , b_lab_half :
14967: GO 15322
14969: LD_INT 6
14971: DOUBLE
14972: EQUAL
14973: IFTRUE 14983
14975: LD_INT 7
14977: DOUBLE
14978: EQUAL
14979: IFTRUE 14983
14981: GO 15236
14983: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
14984: LD_ADDR_VAR 0 6
14988: PUSH
14989: LD_EXP 37
14993: PUSH
14994: LD_VAR 0 9
14998: ARRAY
14999: PUSH
15000: LD_INT 1
15002: ARRAY
15003: PPUSH
15004: LD_EXP 37
15008: PUSH
15009: LD_VAR 0 9
15013: ARRAY
15014: PUSH
15015: LD_INT 2
15017: ARRAY
15018: PPUSH
15019: CALL_OW 428
15023: 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
15024: LD_EXP 37
15028: PUSH
15029: LD_VAR 0 9
15033: ARRAY
15034: PUSH
15035: LD_INT 5
15037: ARRAY
15038: PUSH
15039: LD_INT 9
15041: NONEQUAL
15042: PUSH
15043: LD_EXP 37
15047: PUSH
15048: LD_VAR 0 9
15052: ARRAY
15053: PUSH
15054: LD_INT 5
15056: ARRAY
15057: PUSH
15058: LD_VAR 0 6
15062: PPUSH
15063: LD_INT 1
15065: PPUSH
15066: CALL_OW 268
15070: PUSH
15071: LD_VAR 0 6
15075: PPUSH
15076: LD_INT 2
15078: PPUSH
15079: CALL_OW 268
15083: PUSH
15084: EMPTY
15085: LIST
15086: LIST
15087: IN
15088: NOT
15089: AND
15090: IFFALSE 15118
// ComUpgradeLab ( temp_unit , ai_upcoming_building_data [ base ] [ 5 ] ) else
15092: LD_VAR 0 6
15096: PPUSH
15097: LD_EXP 37
15101: PUSH
15102: LD_VAR 0 9
15106: ARRAY
15107: PUSH
15108: LD_INT 5
15110: ARRAY
15111: PPUSH
15112: CALL_OW 147
15116: GO 15209
// if ai_upcoming_building_data [ base ] [ 6 ] <> b_lab_basic then
15118: LD_EXP 37
15122: PUSH
15123: LD_VAR 0 9
15127: ARRAY
15128: PUSH
15129: LD_INT 6
15131: ARRAY
15132: PUSH
15133: LD_INT 9
15135: NONEQUAL
15136: IFFALSE 15164
// ComUpgradeLab ( temp_unit , ai_upcoming_building_data [ base ] [ 6 ] ) else
15138: LD_VAR 0 6
15142: PPUSH
15143: LD_EXP 37
15147: PUSH
15148: LD_VAR 0 9
15152: ARRAY
15153: PUSH
15154: LD_INT 6
15156: ARRAY
15157: PPUSH
15158: CALL_OW 147
15162: GO 15209
// begin ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
15164: LD_ADDR_EXP 35
15168: PUSH
15169: LD_EXP 35
15173: PPUSH
15174: LD_VAR 0 9
15178: PPUSH
15179: LD_INT 0
15181: PPUSH
15182: CALL_OW 1
15186: ST_TO_ADDR
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
15187: LD_ADDR_EXP 37
15191: PUSH
15192: LD_EXP 37
15196: PPUSH
15197: LD_VAR 0 9
15201: PPUSH
15202: EMPTY
15203: PPUSH
15204: CALL_OW 1
15208: ST_TO_ADDR
// end ; ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
15209: LD_ADDR_EXP 32
15213: PUSH
15214: LD_EXP 32
15218: PPUSH
15219: LD_VAR 0 9
15223: PPUSH
15224: LD_VAR 0 6
15228: PPUSH
15229: CALL_OW 1
15233: ST_TO_ADDR
// end ; b_armoury :
15234: GO 15322
15236: LD_INT 4
15238: DOUBLE
15239: EQUAL
15240: IFTRUE 15244
15242: GO 15321
15244: POP
// begin temp_unit = HexInfo ( ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) ;
15245: LD_ADDR_VAR 0 6
15249: PUSH
15250: LD_EXP 37
15254: PUSH
15255: LD_VAR 0 9
15259: ARRAY
15260: PUSH
15261: LD_INT 1
15263: ARRAY
15264: PPUSH
15265: LD_EXP 37
15269: PUSH
15270: LD_VAR 0 9
15274: ARRAY
15275: PUSH
15276: LD_INT 2
15278: ARRAY
15279: PPUSH
15280: CALL_OW 428
15284: ST_TO_ADDR
// ComUpgrade ( temp_unit ) ;
15285: LD_VAR 0 6
15289: PPUSH
15290: CALL_OW 146
// ai_building_under_construction = Replace ( ai_building_under_construction , base , temp_unit ) ;
15294: LD_ADDR_EXP 32
15298: PUSH
15299: LD_EXP 32
15303: PPUSH
15304: LD_VAR 0 9
15308: PPUSH
15309: LD_VAR 0 6
15313: PPUSH
15314: CALL_OW 1
15318: ST_TO_ADDR
// end ; end ; end ;
15319: GO 15322
15321: POP
// end else
15322: GO 15582
// if UnitsInside ( ai_vehicle_being_moved [ base ] ) > 0 then
15324: LD_EXP 36
15328: PUSH
15329: LD_VAR 0 9
15333: ARRAY
15334: PPUSH
15335: CALL_OW 313
15339: PUSH
15340: LD_INT 0
15342: GREATER
15343: IFFALSE 15482
// begin if GetDistUnitXY ( ai_vehicle_being_moved [ base ] , ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] ) <= away_dist then
15345: LD_EXP 36
15349: PUSH
15350: LD_VAR 0 9
15354: ARRAY
15355: PPUSH
15356: LD_EXP 37
15360: PUSH
15361: LD_VAR 0 9
15365: ARRAY
15366: PUSH
15367: LD_INT 1
15369: ARRAY
15370: PPUSH
15371: LD_EXP 37
15375: PUSH
15376: LD_VAR 0 9
15380: ARRAY
15381: PUSH
15382: LD_INT 2
15384: ARRAY
15385: PPUSH
15386: CALL_OW 297
15390: PUSH
15391: LD_VAR 0 7
15395: LESSEQUAL
15396: IFFALSE 15457
// AI_GetAwayFromXY ( ai_vehicle_being_moved [ base ] , ai_upcoming_building_data [ base ] [ 1 ] , ai_upcoming_building_data [ base ] [ 2 ] , away_dist + 2 , false ) else
15398: LD_EXP 36
15402: PUSH
15403: LD_VAR 0 9
15407: ARRAY
15408: PPUSH
15409: LD_EXP 37
15413: PUSH
15414: LD_VAR 0 9
15418: ARRAY
15419: PUSH
15420: LD_INT 1
15422: ARRAY
15423: PPUSH
15424: LD_EXP 37
15428: PUSH
15429: LD_VAR 0 9
15433: ARRAY
15434: PUSH
15435: LD_INT 2
15437: ARRAY
15438: PPUSH
15439: LD_VAR 0 7
15443: PUSH
15444: LD_INT 2
15446: PLUS
15447: PPUSH
15448: LD_INT 0
15450: PPUSH
15451: CALL 22764 0 5
15455: GO 15480
// ai_vehicle_being_moved = Replace ( ai_vehicle_being_moved , base , 0 ) ;
15457: LD_ADDR_EXP 36
15461: PUSH
15462: LD_EXP 36
15466: PPUSH
15467: LD_VAR 0 9
15471: PPUSH
15472: LD_INT 0
15474: PPUSH
15475: CALL_OW 1
15479: ST_TO_ADDR
// end else
15480: GO 15582
// case GetType ( IsInUnit ( ai_building_constructor [ base ] ) ) of unit_building :
15482: LD_EXP 35
15486: PUSH
15487: LD_VAR 0 9
15491: ARRAY
15492: PPUSH
15493: CALL_OW 310
15497: PPUSH
15498: CALL_OW 247
15502: PUSH
15503: LD_INT 3
15505: DOUBLE
15506: EQUAL
15507: IFTRUE 15511
15509: GO 15529
15511: POP
// ComExitBuilding ( ai_building_constructor [ base ] ) ; unit_vehicle :
15512: LD_EXP 35
15516: PUSH
15517: LD_VAR 0 9
15521: ARRAY
15522: PPUSH
15523: CALL_OW 122
15527: GO 15582
15529: LD_INT 2
15531: DOUBLE
15532: EQUAL
15533: IFTRUE 15537
15535: GO 15555
15537: POP
// ComExitVehicle ( ai_building_constructor [ base ] ) ; else
15538: LD_EXP 35
15542: PUSH
15543: LD_VAR 0 9
15547: ARRAY
15548: PPUSH
15549: CALL_OW 121
15553: GO 15582
15555: POP
// ComEnterUnit ( ai_building_constructor [ base ] , ai_vehicle_being_moved [ base ] ) ; end ;
15556: LD_EXP 35
15560: PUSH
15561: LD_VAR 0 9
15565: ARRAY
15566: PPUSH
15567: LD_EXP 36
15571: PUSH
15572: LD_VAR 0 9
15576: ARRAY
15577: PPUSH
15578: CALL_OW 120
// end ; end ; end ; case side of russians :
15582: LD_VAR 0 1
15586: PUSH
15587: LD_EXP 3
15591: DOUBLE
15592: EQUAL
15593: IFTRUE 15597
15595: GO 15613
15597: POP
// temp_list = GetListOfCratesInArea ( crate_gather_area ) ; end ;
15598: LD_ADDR_VAR 0 4
15602: PUSH
15603: LD_INT 4
15605: PPUSH
15606: CALL_OW 435
15610: ST_TO_ADDR
15611: GO 15614
15613: POP
// if temp_list > 0 and ai_depot [ base ] > 0 then
15614: LD_VAR 0 4
15618: PUSH
15619: LD_INT 0
15621: GREATER
15622: PUSH
15623: LD_EXP 23
15627: PUSH
15628: LD_VAR 0 9
15632: ARRAY
15633: PUSH
15634: LD_INT 0
15636: GREATER
15637: AND
15638: IFFALSE 15770
// begin while temp_list > 0 do
15640: LD_VAR 0 4
15644: PUSH
15645: LD_INT 0
15647: GREATER
15648: IFFALSE 15720
// begin if GetResourceTypeXY ( temp_list [ 1 ] , temp_list [ 2 ] ) = mat_artefact then
15650: LD_VAR 0 4
15654: PUSH
15655: LD_INT 1
15657: ARRAY
15658: PPUSH
15659: LD_VAR 0 4
15663: PUSH
15664: LD_INT 2
15666: ARRAY
15667: PPUSH
15668: CALL_OW 283
15672: PUSH
15673: LD_INT 4
15675: EQUAL
15676: IFFALSE 15716
// begin temp_list = Delete ( temp_list , 1 ) ;
15678: LD_ADDR_VAR 0 4
15682: PUSH
15683: LD_VAR 0 4
15687: PPUSH
15688: LD_INT 1
15690: PPUSH
15691: CALL_OW 3
15695: ST_TO_ADDR
// temp_list = Delete ( temp_list , 1 ) ;
15696: LD_ADDR_VAR 0 4
15700: PUSH
15701: LD_VAR 0 4
15705: PPUSH
15706: LD_INT 1
15708: PPUSH
15709: CALL_OW 3
15713: ST_TO_ADDR
// end else
15714: GO 15718
// break ;
15716: GO 15720
// end ;
15718: GO 15640
// if temp_list > 0 then
15720: LD_VAR 0 4
15724: PUSH
15725: LD_INT 0
15727: GREATER
15728: IFFALSE 15770
// begin ComCollect ( GetHumansOutOfUnits ( engineers_list ^ apemen_engineers_list ) , temp_list [ 1 ] , temp_list [ 2 ] ) ;
15730: LD_VAR 0 3
15734: PUSH
15735: LD_VAR 0 10
15739: ADD
15740: PPUSH
15741: CALL 16563 0 1
15745: PPUSH
15746: LD_VAR 0 4
15750: PUSH
15751: LD_INT 1
15753: ARRAY
15754: PPUSH
15755: LD_VAR 0 4
15759: PUSH
15760: LD_INT 2
15762: ARRAY
15763: PPUSH
15764: CALL_OW 117
// continue ;
15768: GO 12456
// end ; end ; end ; DistributeHumansToBuildings ( base , engineers_list ^ apemen_engineers_list , UnitFilter ( ai_depot [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_engineer , 6 , false , false ) ;
15770: LD_VAR 0 9
15774: PPUSH
15775: LD_VAR 0 3
15779: PUSH
15780: LD_VAR 0 10
15784: ADD
15785: PPUSH
15786: LD_EXP 23
15790: PUSH
15791: LD_VAR 0 9
15795: ARRAY
15796: PPUSH
15797: LD_INT 50
15799: PUSH
15800: EMPTY
15801: LIST
15802: PUSH
15803: LD_INT 3
15805: PUSH
15806: LD_INT 57
15808: PUSH
15809: EMPTY
15810: LIST
15811: PUSH
15812: EMPTY
15813: LIST
15814: LIST
15815: PUSH
15816: EMPTY
15817: LIST
15818: LIST
15819: PPUSH
15820: CALL_OW 72
15824: PPUSH
15825: LD_INT 2
15827: PPUSH
15828: LD_INT 6
15830: PPUSH
15831: LD_INT 0
15833: PPUSH
15834: LD_INT 0
15836: PPUSH
15837: CALL 11632 0 7
// end ;
15841: GO 12456
15843: POP
15844: POP
// until false ;
15845: LD_INT 0
15847: IFFALSE 12439
// end ;
15849: PPOPN 13
15851: END
// on BuildingStarted ( building , builder ) do var side , base ;
15852: LD_INT 0
15854: PPUSH
15855: PPUSH
// begin side = GetSide ( building ) ;
15856: LD_ADDR_VAR 0 3
15860: PUSH
15861: LD_VAR 0 1
15865: PPUSH
15866: CALL_OW 255
15870: ST_TO_ADDR
// if side <> russians then
15871: LD_VAR 0 3
15875: PUSH
15876: LD_EXP 3
15880: NONEQUAL
15881: IFFALSE 15885
// exit ;
15883: GO 15996
// base = FindBase ( building ) ;
15885: LD_ADDR_VAR 0 4
15889: PUSH
15890: LD_VAR 0 1
15894: PPUSH
15895: CALL 10698 0 1
15899: ST_TO_ADDR
// if base = 0 then
15900: LD_VAR 0 4
15904: PUSH
15905: LD_INT 0
15907: EQUAL
15908: IFFALSE 15912
// exit ;
15910: GO 15996
// ai_building_constructor = Replace ( ai_building_constructor , base , 0 ) ;
15912: LD_ADDR_EXP 35
15916: PUSH
15917: LD_EXP 35
15921: PPUSH
15922: LD_VAR 0 4
15926: PPUSH
15927: LD_INT 0
15929: PPUSH
15930: CALL_OW 1
15934: ST_TO_ADDR
// ai_vehicles_having_been_moved = Replace ( ai_vehicles_having_been_moved , base , [ ] ) ;
15935: LD_ADDR_EXP 59
15939: PUSH
15940: LD_EXP 59
15944: PPUSH
15945: LD_VAR 0 4
15949: PPUSH
15950: EMPTY
15951: PPUSH
15952: CALL_OW 1
15956: ST_TO_ADDR
// ai_building_under_construction = Replace ( ai_building_under_construction , base , building ) ;
15957: LD_ADDR_EXP 32
15961: PUSH
15962: LD_EXP 32
15966: PPUSH
15967: LD_VAR 0 4
15971: PPUSH
15972: LD_VAR 0 1
15976: PPUSH
15977: CALL_OW 1
15981: ST_TO_ADDR
// rus_num_building_rebuild = rus_num_building_rebuild - 1 ;
15982: LD_ADDR_EXP 65
15986: PUSH
15987: LD_EXP 65
15991: PUSH
15992: LD_INT 1
15994: MINUS
15995: ST_TO_ADDR
// end ;
15996: PPOPN 4
15998: END
// on BuildingComplete ( building ) do var side , base , temp_list ;
15999: LD_INT 0
16001: PPUSH
16002: PPUSH
16003: PPUSH
// begin side = GetSide ( building ) ;
16004: LD_ADDR_VAR 0 2
16008: PUSH
16009: LD_VAR 0 1
16013: PPUSH
16014: CALL_OW 255
16018: ST_TO_ADDR
// if side <> russians then
16019: LD_VAR 0 2
16023: PUSH
16024: LD_EXP 3
16028: NONEQUAL
16029: IFFALSE 16033
// exit ;
16031: GO 16138
// base = FindBase ( building ) ;
16033: LD_ADDR_VAR 0 3
16037: PUSH
16038: LD_VAR 0 1
16042: PPUSH
16043: CALL 10698 0 1
16047: ST_TO_ADDR
// if base = 0 then
16048: LD_VAR 0 3
16052: PUSH
16053: LD_INT 0
16055: EQUAL
16056: IFFALSE 16060
// exit ;
16058: GO 16138
// BuildUpgradeCommon ( base , building ) ;
16060: LD_VAR 0 3
16064: PPUSH
16065: LD_VAR 0 1
16069: PPUSH
16070: CALL 16218 0 2
// temp_list = ai_all_buildings [ base ] ^ building ;
16074: LD_ADDR_VAR 0 4
16078: PUSH
16079: LD_EXP 34
16083: PUSH
16084: LD_VAR 0 3
16088: ARRAY
16089: PUSH
16090: LD_VAR 0 1
16094: ADD
16095: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
16096: LD_ADDR_EXP 34
16100: PUSH
16101: LD_EXP 34
16105: PPUSH
16106: LD_VAR 0 3
16110: PPUSH
16111: LD_VAR 0 4
16115: PPUSH
16116: CALL_OW 1
16120: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , building , true ) ;
16121: LD_VAR 0 3
16125: PPUSH
16126: LD_VAR 0 1
16130: PPUSH
16131: LD_INT 1
16133: PPUSH
16134: CALL 5131 0 3
// end ;
16138: PPOPN 4
16140: END
// on UpgradeComplete ( building ) do var side , base ;
16141: LD_INT 0
16143: PPUSH
16144: PPUSH
// begin side = GetSide ( building ) ;
16145: LD_ADDR_VAR 0 2
16149: PUSH
16150: LD_VAR 0 1
16154: PPUSH
16155: CALL_OW 255
16159: ST_TO_ADDR
// if side <> russians then
16160: LD_VAR 0 2
16164: PUSH
16165: LD_EXP 3
16169: NONEQUAL
16170: IFFALSE 16174
// exit ;
16172: GO 16215
// base = FindBase ( building ) ;
16174: LD_ADDR_VAR 0 3
16178: PUSH
16179: LD_VAR 0 1
16183: PPUSH
16184: CALL 10698 0 1
16188: ST_TO_ADDR
// if base = 0 then
16189: LD_VAR 0 3
16193: PUSH
16194: LD_INT 0
16196: EQUAL
16197: IFFALSE 16201
// exit ;
16199: GO 16215
// BuildUpgradeCommon ( base , building ) ;
16201: LD_VAR 0 3
16205: PPUSH
16206: LD_VAR 0 1
16210: PPUSH
16211: CALL 16218 0 2
// end ;
16215: PPOPN 3
16217: END
// function BuildUpgradeCommon ( base , building ) ; begin
16218: LD_INT 0
16220: PPUSH
// if GetBType ( building ) = ai_upcoming_building_data [ base ] [ 4 ] then
16221: LD_VAR 0 2
16225: PPUSH
16226: CALL_OW 266
16230: PUSH
16231: LD_EXP 37
16235: PUSH
16236: LD_VAR 0 1
16240: ARRAY
16241: PUSH
16242: LD_INT 4
16244: ARRAY
16245: EQUAL
16246: IFFALSE 16270
// ai_upcoming_building_data = Replace ( ai_upcoming_building_data , base , [ ] ) ;
16248: LD_ADDR_EXP 37
16252: PUSH
16253: LD_EXP 37
16257: PPUSH
16258: LD_VAR 0 1
16262: PPUSH
16263: EMPTY
16264: PPUSH
16265: CALL_OW 1
16269: ST_TO_ADDR
// ai_building_under_construction = Replace ( ai_building_under_construction , base , 0 ) ;
16270: LD_ADDR_EXP 32
16274: PUSH
16275: LD_EXP 32
16279: PPUSH
16280: LD_VAR 0 1
16284: PPUSH
16285: LD_INT 0
16287: PPUSH
16288: CALL_OW 1
16292: ST_TO_ADDR
// end ;
16293: LD_VAR 0 3
16297: RET
// on BuildingCaptured ( captured_building , building_former_side , capturing_unit ) do var temp_list , base ;
16298: LD_INT 0
16300: PPUSH
16301: PPUSH
// begin base = FindBase ( captured_building ) ;
16302: LD_ADDR_VAR 0 5
16306: PUSH
16307: LD_VAR 0 1
16311: PPUSH
16312: CALL 10698 0 1
16316: ST_TO_ADDR
// if base = 0 then
16317: LD_VAR 0 5
16321: PUSH
16322: LD_INT 0
16324: EQUAL
16325: IFFALSE 16329
// exit ;
16327: GO 16560
// if building_former_side = GetBaseSide ( base ) then
16329: LD_VAR 0 2
16333: PUSH
16334: LD_VAR 0 5
16338: PPUSH
16339: CALL 10717 0 1
16343: EQUAL
16344: IFFALSE 16427
// begin if captured_building in ai_all_buildings [ base ] then
16346: LD_VAR 0 1
16350: PUSH
16351: LD_EXP 34
16355: PUSH
16356: LD_VAR 0 5
16360: ARRAY
16361: IN
16362: IFFALSE 16425
// begin RemoveBuildingFromVariables ( base , captured_building ) ;
16364: LD_VAR 0 5
16368: PPUSH
16369: LD_VAR 0 1
16373: PPUSH
16374: CALL 9244 0 2
// temp_list = ai_captured_buildings [ base ] ^ captured_building ;
16378: LD_ADDR_VAR 0 4
16382: PUSH
16383: LD_EXP 61
16387: PUSH
16388: LD_VAR 0 5
16392: ARRAY
16393: PUSH
16394: LD_VAR 0 1
16398: ADD
16399: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
16400: LD_ADDR_EXP 61
16404: PUSH
16405: LD_EXP 61
16409: PPUSH
16410: LD_VAR 0 5
16414: PPUSH
16415: LD_VAR 0 4
16419: PPUSH
16420: CALL_OW 1
16424: ST_TO_ADDR
// end ; end else
16425: GO 16560
// begin if GetSide ( captured_building ) = GetBaseSide ( base ) then
16427: LD_VAR 0 1
16431: PPUSH
16432: CALL_OW 255
16436: PUSH
16437: LD_VAR 0 5
16441: PPUSH
16442: CALL 10717 0 1
16446: EQUAL
16447: IFFALSE 16560
// begin temp_list = ai_all_buildings [ base ] ^ captured_building ;
16449: LD_ADDR_VAR 0 4
16453: PUSH
16454: LD_EXP 34
16458: PUSH
16459: LD_VAR 0 5
16463: ARRAY
16464: PUSH
16465: LD_VAR 0 1
16469: ADD
16470: ST_TO_ADDR
// ai_all_buildings = Replace ( ai_all_buildings , base , temp_list ) ;
16471: LD_ADDR_EXP 34
16475: PUSH
16476: LD_EXP 34
16480: PPUSH
16481: LD_VAR 0 5
16485: PPUSH
16486: LD_VAR 0 4
16490: PPUSH
16491: CALL_OW 1
16495: ST_TO_ADDR
// UpdateBuildingBasicVariables ( base , captured_building , true ) ;
16496: LD_VAR 0 5
16500: PPUSH
16501: LD_VAR 0 1
16505: PPUSH
16506: LD_INT 1
16508: PPUSH
16509: CALL 5131 0 3
// temp_list = ai_captured_buildings [ base ] diff captured_building ;
16513: LD_ADDR_VAR 0 4
16517: PUSH
16518: LD_EXP 61
16522: PUSH
16523: LD_VAR 0 5
16527: ARRAY
16528: PUSH
16529: LD_VAR 0 1
16533: DIFF
16534: ST_TO_ADDR
// ai_captured_buildings = Replace ( ai_captured_buildings , base , temp_list ) ;
16535: LD_ADDR_EXP 61
16539: PUSH
16540: LD_EXP 61
16544: PPUSH
16545: LD_VAR 0 5
16549: PPUSH
16550: LD_VAR 0 4
16554: PPUSH
16555: CALL_OW 1
16559: ST_TO_ADDR
// end ; end ; end ;
16560: PPOPN 5
16562: END
// export function GetHumansOutOfUnits ( un_list ) ; var i ; begin
16563: LD_INT 0
16565: PPUSH
16566: PPUSH
// result = [ ] ;
16567: LD_ADDR_VAR 0 2
16571: PUSH
16572: EMPTY
16573: ST_TO_ADDR
// for i in un_list do
16574: LD_ADDR_VAR 0 3
16578: PUSH
16579: LD_VAR 0 1
16583: PUSH
16584: FOR_IN
16585: IFFALSE 16661
// case GetType ( IsInUnit ( i ) ) of unit_building :
16587: LD_VAR 0 3
16591: PPUSH
16592: CALL_OW 310
16596: PPUSH
16597: CALL_OW 247
16601: PUSH
16602: LD_INT 3
16604: DOUBLE
16605: EQUAL
16606: IFTRUE 16610
16608: GO 16622
16610: POP
// ComExitBuilding ( i ) ; unit_vehicle :
16611: LD_VAR 0 3
16615: PPUSH
16616: CALL_OW 122
16620: GO 16659
16622: LD_INT 2
16624: DOUBLE
16625: EQUAL
16626: IFTRUE 16630
16628: GO 16642
16630: POP
// ComExitVehicle ( i ) ; else
16631: LD_VAR 0 3
16635: PPUSH
16636: CALL_OW 121
16640: GO 16659
16642: POP
// result = result ^ i ; end ;
16643: LD_ADDR_VAR 0 2
16647: PUSH
16648: LD_VAR 0 2
16652: PUSH
16653: LD_VAR 0 3
16657: ADD
16658: ST_TO_ADDR
16659: GO 16584
16661: POP
16662: POP
// end ;
16663: LD_VAR 0 2
16667: RET
// export function BaseUnderAttack ( base , attack_side ) ; var area , def_side , temp_list , i ; begin
16668: LD_INT 0
16670: PPUSH
16671: PPUSH
16672: PPUSH
16673: PPUSH
16674: PPUSH
// result = false ;
16675: LD_ADDR_VAR 0 3
16679: PUSH
16680: LD_INT 0
16682: ST_TO_ADDR
// def_side = GetBaseSide ( base ) ;
16683: LD_ADDR_VAR 0 5
16687: PUSH
16688: LD_VAR 0 1
16692: PPUSH
16693: CALL 10717 0 1
16697: ST_TO_ADDR
// area = GetBaseArea ( base ) ;
16698: LD_ADDR_VAR 0 4
16702: PUSH
16703: LD_VAR 0 1
16707: PPUSH
16708: CALL 10735 0 1
16712: ST_TO_ADDR
// if attack_side = def_side then
16713: LD_VAR 0 2
16717: PUSH
16718: LD_VAR 0 5
16722: EQUAL
16723: IFFALSE 16727
// exit ;
16725: GO 17167
// if attack_side = - 1 then
16727: LD_VAR 0 2
16731: PUSH
16732: LD_INT 1
16734: NEG
16735: EQUAL
16736: IFFALSE 16945
// begin if FilterAllUnits ( [ [ f_enemy , def_side ] , [ f_inarea , area ] ] ) > 0 then
16738: LD_INT 81
16740: PUSH
16741: LD_VAR 0 5
16745: PUSH
16746: EMPTY
16747: LIST
16748: LIST
16749: PUSH
16750: LD_INT 95
16752: PUSH
16753: LD_VAR 0 4
16757: PUSH
16758: EMPTY
16759: LIST
16760: LIST
16761: PUSH
16762: EMPTY
16763: LIST
16764: LIST
16765: PPUSH
16766: CALL_OW 69
16770: PUSH
16771: LD_INT 0
16773: GREATER
16774: IFFALSE 16786
// begin result = true ;
16776: LD_ADDR_VAR 0 3
16780: PUSH
16781: LD_INT 1
16783: ST_TO_ADDR
// exit ;
16784: GO 17167
// end ; if ContactTime ( def_side ) >= 0 0$10 then
16786: LD_VAR 0 5
16790: PPUSH
16791: CALL_OW 462
16795: PUSH
16796: LD_INT 350
16798: GREATEREQUAL
16799: IFFALSE 16803
// exit ;
16801: GO 17167
// temp_list = [ ] ;
16803: LD_ADDR_VAR 0 6
16807: PUSH
16808: EMPTY
16809: ST_TO_ADDR
// for i in ( ai_bases diff base ) do
16810: LD_ADDR_VAR 0 7
16814: PUSH
16815: LD_EXP 49
16819: PUSH
16820: LD_VAR 0 1
16824: DIFF
16825: PUSH
16826: FOR_IN
16827: IFFALSE 16873
// temp_list = Insert ( temp_list , 1 , [ f_not , [ f_inarea , GetBaseArea ( i ) ] ] ) ;
16829: LD_ADDR_VAR 0 6
16833: PUSH
16834: LD_VAR 0 6
16838: PPUSH
16839: LD_INT 1
16841: PPUSH
16842: LD_INT 3
16844: PUSH
16845: LD_INT 95
16847: PUSH
16848: LD_VAR 0 7
16852: PPUSH
16853: CALL 10735 0 1
16857: PUSH
16858: EMPTY
16859: LIST
16860: LIST
16861: PUSH
16862: EMPTY
16863: LIST
16864: LIST
16865: PPUSH
16866: CALL_OW 2
16870: ST_TO_ADDR
16871: GO 16826
16873: POP
16874: POP
// temp_list = FilterAllUnits ( [ [ f_enemy , def_side ] , [ f_not , [ f_type , unit_building ] ] ] ^ temp_list ) ;
16875: LD_ADDR_VAR 0 6
16879: PUSH
16880: LD_INT 81
16882: PUSH
16883: LD_VAR 0 5
16887: PUSH
16888: EMPTY
16889: LIST
16890: LIST
16891: PUSH
16892: LD_INT 3
16894: PUSH
16895: LD_INT 21
16897: PUSH
16898: LD_INT 3
16900: PUSH
16901: EMPTY
16902: LIST
16903: LIST
16904: PUSH
16905: EMPTY
16906: LIST
16907: LIST
16908: PUSH
16909: EMPTY
16910: LIST
16911: LIST
16912: PUSH
16913: LD_VAR 0 6
16917: ADD
16918: PPUSH
16919: CALL_OW 69
16923: ST_TO_ADDR
// if not AnyNearBaseArea ( temp_list , base ) then
16924: LD_VAR 0 6
16928: PPUSH
16929: LD_VAR 0 1
16933: PPUSH
16934: CALL 17243 0 2
16938: NOT
16939: IFFALSE 16943
// exit ;
16941: GO 17167
// end else
16943: GO 17159
// begin if FilterAllUnits ( [ [ f_side , attack_side ] , [ f_inarea , area ] ] ) > 0 then
16945: LD_INT 22
16947: PUSH
16948: LD_VAR 0 2
16952: PUSH
16953: EMPTY
16954: LIST
16955: LIST
16956: PUSH
16957: LD_INT 95
16959: PUSH
16960: LD_VAR 0 4
16964: PUSH
16965: EMPTY
16966: LIST
16967: LIST
16968: PUSH
16969: EMPTY
16970: LIST
16971: LIST
16972: PPUSH
16973: CALL_OW 69
16977: PUSH
16978: LD_INT 0
16980: GREATER
16981: IFFALSE 16993
// begin result = true ;
16983: LD_ADDR_VAR 0 3
16987: PUSH
16988: LD_INT 1
16990: ST_TO_ADDR
// exit ;
16991: GO 17167
// end ; if ContactTime ( [ def_side , attack_side ] ) >= 0 0$10 then
16993: LD_VAR 0 5
16997: PUSH
16998: LD_VAR 0 2
17002: PUSH
17003: EMPTY
17004: LIST
17005: LIST
17006: PPUSH
17007: CALL_OW 462
17011: PUSH
17012: LD_INT 350
17014: GREATEREQUAL
17015: IFFALSE 17019
// exit ;
17017: GO 17167
// temp_list = [ ] ;
17019: LD_ADDR_VAR 0 6
17023: PUSH
17024: EMPTY
17025: ST_TO_ADDR
// for i in ( ai_bases diff base ) do
17026: LD_ADDR_VAR 0 7
17030: PUSH
17031: LD_EXP 49
17035: PUSH
17036: LD_VAR 0 1
17040: DIFF
17041: PUSH
17042: FOR_IN
17043: IFFALSE 17089
// temp_list = Insert ( temp_list , 1 , [ f_not , [ f_inarea , GetBaseArea ( i ) ] ] ) ;
17045: LD_ADDR_VAR 0 6
17049: PUSH
17050: LD_VAR 0 6
17054: PPUSH
17055: LD_INT 1
17057: PPUSH
17058: LD_INT 3
17060: PUSH
17061: LD_INT 95
17063: PUSH
17064: LD_VAR 0 7
17068: PPUSH
17069: CALL 10735 0 1
17073: PUSH
17074: EMPTY
17075: LIST
17076: LIST
17077: PUSH
17078: EMPTY
17079: LIST
17080: LIST
17081: PPUSH
17082: CALL_OW 2
17086: ST_TO_ADDR
17087: GO 17042
17089: POP
17090: POP
// temp_list = FilterAllUnits ( [ [ f_side , attack_side ] , [ f_not , [ f_type , unit_building ] ] ] ^ temp_list ) ;
17091: LD_ADDR_VAR 0 6
17095: PUSH
17096: LD_INT 22
17098: PUSH
17099: LD_VAR 0 2
17103: PUSH
17104: EMPTY
17105: LIST
17106: LIST
17107: PUSH
17108: LD_INT 3
17110: PUSH
17111: LD_INT 21
17113: PUSH
17114: LD_INT 3
17116: PUSH
17117: EMPTY
17118: LIST
17119: LIST
17120: PUSH
17121: EMPTY
17122: LIST
17123: LIST
17124: PUSH
17125: EMPTY
17126: LIST
17127: LIST
17128: PUSH
17129: LD_VAR 0 6
17133: ADD
17134: PPUSH
17135: CALL_OW 69
17139: ST_TO_ADDR
// if not AnyNearBaseArea ( temp_list , base ) then
17140: LD_VAR 0 6
17144: PPUSH
17145: LD_VAR 0 1
17149: PPUSH
17150: CALL 17243 0 2
17154: NOT
17155: IFFALSE 17159
// exit ;
17157: GO 17167
// end ; result = true ;
17159: LD_ADDR_VAR 0 3
17163: PUSH
17164: LD_INT 1
17166: ST_TO_ADDR
// end ;
17167: LD_VAR 0 3
17171: RET
// export function ListFilterNearArea ( list , area ) ; var i ; begin
17172: LD_INT 0
17174: PPUSH
17175: PPUSH
// result = [ ] ;
17176: LD_ADDR_VAR 0 3
17180: PUSH
17181: EMPTY
17182: ST_TO_ADDR
// for i in list do
17183: LD_ADDR_VAR 0 4
17187: PUSH
17188: LD_VAR 0 1
17192: PUSH
17193: FOR_IN
17194: IFFALSE 17236
// if GetDistUnitArea ( i , area ) <= ai_near_base_dist then
17196: LD_VAR 0 4
17200: PPUSH
17201: LD_VAR 0 2
17205: PPUSH
17206: CALL_OW 299
17210: PUSH
17211: LD_EXP 44
17215: LESSEQUAL
17216: IFFALSE 17234
// result = result ^ i ;
17218: LD_ADDR_VAR 0 3
17222: PUSH
17223: LD_VAR 0 3
17227: PUSH
17228: LD_VAR 0 4
17232: ADD
17233: ST_TO_ADDR
17234: GO 17193
17236: POP
17237: POP
// end ;
17238: LD_VAR 0 3
17242: RET
// function AnyNearBaseArea ( list , base ) ; var i , area ; begin
17243: LD_INT 0
17245: PPUSH
17246: PPUSH
17247: PPUSH
// result = false ;
17248: LD_ADDR_VAR 0 3
17252: PUSH
17253: LD_INT 0
17255: ST_TO_ADDR
// area = GetBaseArea ( base ) ;
17256: LD_ADDR_VAR 0 5
17260: PUSH
17261: LD_VAR 0 2
17265: PPUSH
17266: CALL 10735 0 1
17270: ST_TO_ADDR
// for i in list do
17271: LD_ADDR_VAR 0 4
17275: PUSH
17276: LD_VAR 0 1
17280: PUSH
17281: FOR_IN
17282: IFFALSE 17318
// if GetDistUnitArea ( i , area ) <= ai_near_base_dist then
17284: LD_VAR 0 4
17288: PPUSH
17289: LD_VAR 0 5
17293: PPUSH
17294: CALL_OW 299
17298: PUSH
17299: LD_EXP 44
17303: LESSEQUAL
17304: IFFALSE 17316
// begin result = true ;
17306: LD_ADDR_VAR 0 3
17310: PUSH
17311: LD_INT 1
17313: ST_TO_ADDR
// break ;
17314: GO 17318
// end ;
17316: GO 17281
17318: POP
17319: POP
// end ;
17320: LD_VAR 0 3
17324: RET
// every 0 0$1 do var side , base , i , mechanics_list , temp_list , temp_list_3 , temp_unit , vehicles_list , allowed_to_repair_vehicles ; var under_attack , free_parking_spots , k , vehicles_drivers , temp_list_2 , area ;
17325: GO 17327
17327: DISABLE
17328: LD_INT 0
17330: PPUSH
17331: PPUSH
17332: PPUSH
17333: PPUSH
17334: PPUSH
17335: PPUSH
17336: PPUSH
17337: PPUSH
17338: PPUSH
17339: PPUSH
17340: PPUSH
17341: PPUSH
17342: PPUSH
17343: PPUSH
17344: PPUSH
// begin side = russians ;
17345: LD_ADDR_VAR 0 1
17349: PUSH
17350: LD_EXP 3
17354: ST_TO_ADDR
// area = ru_base_area ;
17355: LD_ADDR_VAR 0 15
17359: PUSH
17360: LD_INT 1
17362: ST_TO_ADDR
// vehicles_drivers = [ ] ;
17363: LD_ADDR_VAR 0 13
17367: PUSH
17368: EMPTY
17369: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
17370: LD_INT 35
17372: PPUSH
17373: CALL_OW 67
// for base in ai_bases do
17377: LD_ADDR_VAR 0 2
17381: PUSH
17382: LD_EXP 49
17386: PUSH
17387: FOR_IN
17388: IFFALSE 20469
// begin under_attack = BaseUnderAttack ( base , - 1 ) ;
17390: LD_ADDR_VAR 0 10
17394: PUSH
17395: LD_VAR 0 2
17399: PPUSH
17400: LD_INT 1
17402: NEG
17403: PPUSH
17404: CALL 16668 0 2
17408: ST_TO_ADDR
// for i in ai_vehicles_defend [ base ] do
17409: LD_ADDR_VAR 0 3
17413: PUSH
17414: LD_EXP 28
17418: PUSH
17419: LD_VAR 0 2
17423: ARRAY
17424: PUSH
17425: FOR_IN
17426: IFFALSE 17521
// if vehicles_drivers >= i then
17428: LD_VAR 0 13
17432: PUSH
17433: LD_VAR 0 3
17437: GREATEREQUAL
17438: IFFALSE 17519
// if vehicles_drivers [ i ] > 0 then
17440: LD_VAR 0 13
17444: PUSH
17445: LD_VAR 0 3
17449: ARRAY
17450: PUSH
17451: LD_INT 0
17453: GREATER
17454: IFFALSE 17519
// if IsInUnit ( vehicles_drivers [ i ] ) = i or IsDead ( vehicles_drivers [ i ] ) then
17456: LD_VAR 0 13
17460: PUSH
17461: LD_VAR 0 3
17465: ARRAY
17466: PPUSH
17467: CALL_OW 310
17471: PUSH
17472: LD_VAR 0 3
17476: EQUAL
17477: PUSH
17478: LD_VAR 0 13
17482: PUSH
17483: LD_VAR 0 3
17487: ARRAY
17488: PPUSH
17489: CALL_OW 301
17493: OR
17494: IFFALSE 17519
// vehicles_drivers = Replace ( vehicles_drivers , i , 0 ) ;
17496: LD_ADDR_VAR 0 13
17500: PUSH
17501: LD_VAR 0 13
17505: PPUSH
17506: LD_VAR 0 3
17510: PPUSH
17511: LD_INT 0
17513: PPUSH
17514: CALL_OW 1
17518: ST_TO_ADDR
17519: GO 17425
17521: POP
17522: POP
// mechanics_list = UnitFilter ( ai_mechanics_defend [ base ] diff ai_heal_these_humans [ base ] , [ f_not , [ f_driving ] ] ) ;
17523: LD_ADDR_VAR 0 4
17527: PUSH
17528: LD_EXP 19
17532: PUSH
17533: LD_VAR 0 2
17537: ARRAY
17538: PUSH
17539: LD_EXP 33
17543: PUSH
17544: LD_VAR 0 2
17548: ARRAY
17549: DIFF
17550: PPUSH
17551: LD_INT 3
17553: PUSH
17554: LD_INT 55
17556: PUSH
17557: EMPTY
17558: LIST
17559: PUSH
17560: EMPTY
17561: LIST
17562: LIST
17563: PPUSH
17564: CALL_OW 72
17568: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
17569: LD_ADDR_VAR 0 5
17573: PUSH
17574: LD_EXP 33
17578: PUSH
17579: LD_VAR 0 2
17583: ARRAY
17584: ST_TO_ADDR
// i = 1 ;
17585: LD_ADDR_VAR 0 3
17589: PUSH
17590: LD_INT 1
17592: ST_TO_ADDR
// while i <= mechanics_list do
17593: LD_VAR 0 3
17597: PUSH
17598: LD_VAR 0 4
17602: LESSEQUAL
17603: IFFALSE 17698
// begin if GetLives ( mechanics_list [ i ] ) <= 900 then
17605: LD_VAR 0 4
17609: PUSH
17610: LD_VAR 0 3
17614: ARRAY
17615: PPUSH
17616: CALL_OW 256
17620: PUSH
17621: LD_INT 900
17623: LESSEQUAL
17624: IFFALSE 17682
// begin temp_list = temp_list ^ mechanics_list [ i ] ;
17626: LD_ADDR_VAR 0 5
17630: PUSH
17631: LD_VAR 0 5
17635: PUSH
17636: LD_VAR 0 4
17640: PUSH
17641: LD_VAR 0 3
17645: ARRAY
17646: ADD
17647: ST_TO_ADDR
// mechanics_list = Delete ( mechanics_list , i ) ;
17648: LD_ADDR_VAR 0 4
17652: PUSH
17653: LD_VAR 0 4
17657: PPUSH
17658: LD_VAR 0 3
17662: PPUSH
17663: CALL_OW 3
17667: ST_TO_ADDR
// i = i - 1 ;
17668: LD_ADDR_VAR 0 3
17672: PUSH
17673: LD_VAR 0 3
17677: PUSH
17678: LD_INT 1
17680: MINUS
17681: ST_TO_ADDR
// end ; i = i + 1 ;
17682: LD_ADDR_VAR 0 3
17686: PUSH
17687: LD_VAR 0 3
17691: PUSH
17692: LD_INT 1
17694: PLUS
17695: ST_TO_ADDR
// end ;
17696: GO 17593
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
17698: LD_ADDR_EXP 33
17702: PUSH
17703: LD_EXP 33
17707: PPUSH
17708: LD_VAR 0 2
17712: PPUSH
17713: LD_VAR 0 5
17717: PPUSH
17718: CALL_OW 1
17722: ST_TO_ADDR
// temp_list = [ ] ;
17723: LD_ADDR_VAR 0 5
17727: PUSH
17728: EMPTY
17729: ST_TO_ADDR
// for i in ai_vehicles_being_repaired [ base ] do
17730: LD_ADDR_VAR 0 3
17734: PUSH
17735: LD_EXP 47
17739: PUSH
17740: LD_VAR 0 2
17744: ARRAY
17745: PUSH
17746: FOR_IN
17747: IFFALSE 17782
// if GetLives ( i ) < 1000 then
17749: LD_VAR 0 3
17753: PPUSH
17754: CALL_OW 256
17758: PUSH
17759: LD_INT 1000
17761: LESS
17762: IFFALSE 17780
// temp_list = temp_list ^ i ;
17764: LD_ADDR_VAR 0 5
17768: PUSH
17769: LD_VAR 0 5
17773: PUSH
17774: LD_VAR 0 3
17778: ADD
17779: ST_TO_ADDR
17780: GO 17746
17782: POP
17783: POP
// ai_vehicles_being_repaired = Replace ( ai_vehicles_being_repaired , base , temp_list ) ;
17784: LD_ADDR_EXP 47
17788: PUSH
17789: LD_EXP 47
17793: PPUSH
17794: LD_VAR 0 2
17798: PPUSH
17799: LD_VAR 0 5
17803: PPUSH
17804: CALL_OW 1
17808: ST_TO_ADDR
// temp_list = [ ] ;
17809: LD_ADDR_VAR 0 5
17813: PUSH
17814: EMPTY
17815: ST_TO_ADDR
// for i in ai_retreating_vehicles_defend [ base ] diff ai_vehicles_being_repaired [ base ] do
17816: LD_ADDR_VAR 0 3
17820: PUSH
17821: LD_EXP 43
17825: PUSH
17826: LD_VAR 0 2
17830: ARRAY
17831: PUSH
17832: LD_EXP 47
17836: PUSH
17837: LD_VAR 0 2
17841: ARRAY
17842: DIFF
17843: PUSH
17844: FOR_IN
17845: IFFALSE 17880
// if GetLives ( i ) < 1000 then
17847: LD_VAR 0 3
17851: PPUSH
17852: CALL_OW 256
17856: PUSH
17857: LD_INT 1000
17859: LESS
17860: IFFALSE 17878
// temp_list = temp_list ^ i ;
17862: LD_ADDR_VAR 0 5
17866: PUSH
17867: LD_VAR 0 5
17871: PUSH
17872: LD_VAR 0 3
17876: ADD
17877: ST_TO_ADDR
17878: GO 17844
17880: POP
17881: POP
// ai_retreating_vehicles_defend = Replace ( ai_retreating_vehicles_defend , base , temp_list ) ;
17882: LD_ADDR_EXP 43
17886: PUSH
17887: LD_EXP 43
17891: PPUSH
17892: LD_VAR 0 2
17896: PPUSH
17897: LD_VAR 0 5
17901: PPUSH
17902: CALL_OW 1
17906: ST_TO_ADDR
// temp_list = ai_retreating_vehicles_defend [ base ] ;
17907: LD_ADDR_VAR 0 5
17911: PUSH
17912: LD_EXP 43
17916: PUSH
17917: LD_VAR 0 2
17921: ARRAY
17922: ST_TO_ADDR
// for i in ai_vehicles_defend [ base ] diff ( ai_retreating_vehicles_defend [ base ] ^ ai_vehicles_being_repaired [ base ] ) do
17923: LD_ADDR_VAR 0 3
17927: PUSH
17928: LD_EXP 28
17932: PUSH
17933: LD_VAR 0 2
17937: ARRAY
17938: PUSH
17939: LD_EXP 43
17943: PUSH
17944: LD_VAR 0 2
17948: ARRAY
17949: PUSH
17950: LD_EXP 47
17954: PUSH
17955: LD_VAR 0 2
17959: ARRAY
17960: ADD
17961: DIFF
17962: PUSH
17963: FOR_IN
17964: IFFALSE 17999
// if GetLives ( i ) <= 250 then
17966: LD_VAR 0 3
17970: PPUSH
17971: CALL_OW 256
17975: PUSH
17976: LD_INT 250
17978: LESSEQUAL
17979: IFFALSE 17997
// temp_list = temp_list ^ i ;
17981: LD_ADDR_VAR 0 5
17985: PUSH
17986: LD_VAR 0 5
17990: PUSH
17991: LD_VAR 0 3
17995: ADD
17996: ST_TO_ADDR
17997: GO 17963
17999: POP
18000: POP
// ai_retreating_vehicles_defend = Replace ( ai_retreating_vehicles_defend , base , temp_list ) ;
18001: LD_ADDR_EXP 43
18005: PUSH
18006: LD_EXP 43
18010: PPUSH
18011: LD_VAR 0 2
18015: PPUSH
18016: LD_VAR 0 5
18020: PPUSH
18021: CALL_OW 1
18025: ST_TO_ADDR
// temp_list = [ ] ;
18026: LD_ADDR_VAR 0 5
18030: PUSH
18031: EMPTY
18032: ST_TO_ADDR
// for i in ai_refuel_vehicles_list [ base ] diff ( ai_retreating_vehicles_defend [ base ] ^ ai_vehicles_being_repaired [ base ] ^ ai_vehicle_being_moved [ base ] ^ ai_vehicles_having_been_moved [ base ] ) do
18033: LD_ADDR_VAR 0 3
18037: PUSH
18038: LD_EXP 46
18042: PUSH
18043: LD_VAR 0 2
18047: ARRAY
18048: PUSH
18049: LD_EXP 43
18053: PUSH
18054: LD_VAR 0 2
18058: ARRAY
18059: PUSH
18060: LD_EXP 47
18064: PUSH
18065: LD_VAR 0 2
18069: ARRAY
18070: ADD
18071: PUSH
18072: LD_EXP 36
18076: PUSH
18077: LD_VAR 0 2
18081: ARRAY
18082: ADD
18083: PUSH
18084: LD_EXP 59
18088: PUSH
18089: LD_VAR 0 2
18093: ARRAY
18094: ADD
18095: DIFF
18096: PUSH
18097: FOR_IN
18098: IFFALSE 18133
// if GetFuel ( i ) < 95 then
18100: LD_VAR 0 3
18104: PPUSH
18105: CALL_OW 261
18109: PUSH
18110: LD_INT 95
18112: LESS
18113: IFFALSE 18131
// temp_list = temp_list ^ i ;
18115: LD_ADDR_VAR 0 5
18119: PUSH
18120: LD_VAR 0 5
18124: PUSH
18125: LD_VAR 0 3
18129: ADD
18130: ST_TO_ADDR
18131: GO 18097
18133: POP
18134: POP
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
18135: LD_ADDR_EXP 46
18139: PUSH
18140: LD_EXP 46
18144: PPUSH
18145: LD_VAR 0 2
18149: PPUSH
18150: LD_VAR 0 5
18154: PPUSH
18155: CALL_OW 1
18159: ST_TO_ADDR
// if under_attack then
18160: LD_VAR 0 10
18164: IFFALSE 18429
// begin vehicles_list = ai_vehicles_defend [ base ] diff ( ai_retreating_vehicles_defend [ base ] ^ ai_vehicles_being_repaired [ base ] ^ ai_vehicle_being_moved [ base ] ^ ai_vehicles_having_been_moved [ base ] ) ;
18166: LD_ADDR_VAR 0 8
18170: PUSH
18171: LD_EXP 28
18175: PUSH
18176: LD_VAR 0 2
18180: ARRAY
18181: PUSH
18182: LD_EXP 43
18186: PUSH
18187: LD_VAR 0 2
18191: ARRAY
18192: PUSH
18193: LD_EXP 47
18197: PUSH
18198: LD_VAR 0 2
18202: ARRAY
18203: ADD
18204: PUSH
18205: LD_EXP 36
18209: PUSH
18210: LD_VAR 0 2
18214: ARRAY
18215: ADD
18216: PUSH
18217: LD_EXP 59
18221: PUSH
18222: LD_VAR 0 2
18226: ARRAY
18227: ADD
18228: DIFF
18229: ST_TO_ADDR
// temp_list = UnitFilter ( vehicles_list , [ [ f_control , control_manual ] , [ f_ok ] , [ f_empty ] , [ f_inarea , area ] ] ) ;
18230: LD_ADDR_VAR 0 5
18234: PUSH
18235: LD_VAR 0 8
18239: PPUSH
18240: LD_INT 33
18242: PUSH
18243: LD_INT 1
18245: PUSH
18246: EMPTY
18247: LIST
18248: LIST
18249: PUSH
18250: LD_INT 50
18252: PUSH
18253: EMPTY
18254: LIST
18255: PUSH
18256: LD_INT 58
18258: PUSH
18259: EMPTY
18260: LIST
18261: PUSH
18262: LD_INT 95
18264: PUSH
18265: LD_VAR 0 15
18269: PUSH
18270: EMPTY
18271: LIST
18272: LIST
18273: PUSH
18274: EMPTY
18275: LIST
18276: LIST
18277: LIST
18278: LIST
18279: PPUSH
18280: CALL_OW 72
18284: ST_TO_ADDR
// temp_list = FindDriverHelper ( temp_list , mechanics_list , vehicles_drivers ) ;
18285: LD_ADDR_VAR 0 5
18289: PUSH
18290: LD_VAR 0 5
18294: PPUSH
18295: LD_VAR 0 4
18299: PPUSH
18300: LD_VAR 0 13
18304: PPUSH
18305: CALL 20478 0 3
18309: ST_TO_ADDR
// mechanics_list = temp_list [ 1 ] ;
18310: LD_ADDR_VAR 0 4
18314: PUSH
18315: LD_VAR 0 5
18319: PUSH
18320: LD_INT 1
18322: ARRAY
18323: ST_TO_ADDR
// vehicles_drivers = temp_list [ 2 ] ;
18324: LD_ADDR_VAR 0 13
18328: PUSH
18329: LD_VAR 0 5
18333: PUSH
18334: LD_INT 2
18336: ARRAY
18337: ST_TO_ADDR
// temp_list = ListFilterNearArea ( FilterAllUnits ( [ [ f_enemy , side ] , [ f_ok ] ] ) , area ) ;
18338: LD_ADDR_VAR 0 5
18342: PUSH
18343: LD_INT 81
18345: PUSH
18346: LD_VAR 0 1
18350: PUSH
18351: EMPTY
18352: LIST
18353: LIST
18354: PUSH
18355: LD_INT 50
18357: PUSH
18358: EMPTY
18359: LIST
18360: PUSH
18361: EMPTY
18362: LIST
18363: LIST
18364: PPUSH
18365: CALL_OW 69
18369: PPUSH
18370: LD_VAR 0 15
18374: PPUSH
18375: CALL 17172 0 2
18379: ST_TO_ADDR
// if temp_list > 0 then
18380: LD_VAR 0 5
18384: PUSH
18385: LD_INT 0
18387: GREATER
18388: IFFALSE 18427
// ComAgressiveMove ( vehicles_list , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) ) ;
18390: LD_VAR 0 8
18394: PPUSH
18395: LD_VAR 0 5
18399: PUSH
18400: LD_INT 1
18402: ARRAY
18403: PPUSH
18404: CALL_OW 250
18408: PPUSH
18409: LD_VAR 0 5
18413: PUSH
18414: LD_INT 1
18416: ARRAY
18417: PPUSH
18418: CALL_OW 251
18422: PPUSH
18423: CALL_OW 114
// end else
18427: GO 18768
// if IsOk ( ai_depot [ base ] ) then
18429: LD_EXP 23
18433: PUSH
18434: LD_VAR 0 2
18438: ARRAY
18439: PPUSH
18440: CALL_OW 302
18444: IFFALSE 18768
// begin temp_list = ai_refuel_vehicles_list [ base ] ;
18446: LD_ADDR_VAR 0 5
18450: PUSH
18451: LD_EXP 46
18455: PUSH
18456: LD_VAR 0 2
18460: ARRAY
18461: ST_TO_ADDR
// for i in ai_vehicles_defend [ base ] diff ai_refuel_vehicles_list [ base ] do
18462: LD_ADDR_VAR 0 3
18466: PUSH
18467: LD_EXP 28
18471: PUSH
18472: LD_VAR 0 2
18476: ARRAY
18477: PUSH
18478: LD_EXP 46
18482: PUSH
18483: LD_VAR 0 2
18487: ARRAY
18488: DIFF
18489: PUSH
18490: FOR_IN
18491: IFFALSE 18541
// if GetFuel ( i ) < 70 and GetEngine ( i ) = engine_combustion then
18493: LD_VAR 0 3
18497: PPUSH
18498: CALL_OW 261
18502: PUSH
18503: LD_INT 70
18505: LESS
18506: PUSH
18507: LD_VAR 0 3
18511: PPUSH
18512: CALL_OW 262
18516: PUSH
18517: LD_INT 1
18519: EQUAL
18520: AND
18521: IFFALSE 18539
// temp_list = temp_list ^ i ;
18523: LD_ADDR_VAR 0 5
18527: PUSH
18528: LD_VAR 0 5
18532: PUSH
18533: LD_VAR 0 3
18537: ADD
18538: ST_TO_ADDR
18539: GO 18490
18541: POP
18542: POP
// temp_list = temp_list diff ( ai_retreating_vehicles_defend [ base ] ^ ai_vehicles_being_repaired [ base ] ^ ai_vehicle_being_moved [ base ] ^ ai_vehicles_having_been_moved [ base ] ) ;
18543: LD_ADDR_VAR 0 5
18547: PUSH
18548: LD_VAR 0 5
18552: PUSH
18553: LD_EXP 43
18557: PUSH
18558: LD_VAR 0 2
18562: ARRAY
18563: PUSH
18564: LD_EXP 47
18568: PUSH
18569: LD_VAR 0 2
18573: ARRAY
18574: ADD
18575: PUSH
18576: LD_EXP 36
18580: PUSH
18581: LD_VAR 0 2
18585: ARRAY
18586: ADD
18587: PUSH
18588: LD_EXP 59
18592: PUSH
18593: LD_VAR 0 2
18597: ARRAY
18598: ADD
18599: DIFF
18600: ST_TO_ADDR
// ai_refuel_vehicles_list = Replace ( ai_refuel_vehicles_list , base , temp_list ) ;
18601: LD_ADDR_EXP 46
18605: PUSH
18606: LD_EXP 46
18610: PPUSH
18611: LD_VAR 0 2
18615: PPUSH
18616: LD_VAR 0 5
18620: PPUSH
18621: CALL_OW 1
18625: ST_TO_ADDR
// temp_list = UnitFilter ( ai_refuel_vehicles_list [ base ] , [ [ f_empty ] , [ f_ok ] ] ) ;
18626: LD_ADDR_VAR 0 5
18630: PUSH
18631: LD_EXP 46
18635: PUSH
18636: LD_VAR 0 2
18640: ARRAY
18641: PPUSH
18642: LD_INT 58
18644: PUSH
18645: EMPTY
18646: LIST
18647: PUSH
18648: LD_INT 50
18650: PUSH
18651: EMPTY
18652: LIST
18653: PUSH
18654: EMPTY
18655: LIST
18656: LIST
18657: PPUSH
18658: CALL_OW 72
18662: ST_TO_ADDR
// temp_list = FindDriverHelper ( temp_list , mechanics_list , vehicles_drivers ) ;
18663: LD_ADDR_VAR 0 5
18667: PUSH
18668: LD_VAR 0 5
18672: PPUSH
18673: LD_VAR 0 4
18677: PPUSH
18678: LD_VAR 0 13
18682: PPUSH
18683: CALL 20478 0 3
18687: ST_TO_ADDR
// mechanics_list = temp_list [ 1 ] ;
18688: LD_ADDR_VAR 0 4
18692: PUSH
18693: LD_VAR 0 5
18697: PUSH
18698: LD_INT 1
18700: ARRAY
18701: ST_TO_ADDR
// vehicles_drivers = temp_list [ 2 ] ;
18702: LD_ADDR_VAR 0 13
18706: PUSH
18707: LD_VAR 0 5
18711: PUSH
18712: LD_INT 2
18714: ARRAY
18715: ST_TO_ADDR
// ComMoveUnit ( ai_refuel_vehicles_list [ base ] , ai_depot [ base ] ) ;
18716: LD_EXP 46
18720: PUSH
18721: LD_VAR 0 2
18725: ARRAY
18726: PPUSH
18727: LD_EXP 23
18731: PUSH
18732: LD_VAR 0 2
18736: ARRAY
18737: PPUSH
18738: CALL_OW 112
// AddComRefuel ( ai_refuel_vehicles_list [ base ] , ai_depot [ base ] ) ;
18742: LD_EXP 46
18746: PUSH
18747: LD_VAR 0 2
18751: ARRAY
18752: PPUSH
18753: LD_EXP 23
18757: PUSH
18758: LD_VAR 0 2
18762: ARRAY
18763: PPUSH
18764: CALL_OW 210
// end ; free_parking_spots = [ ] ;
18768: LD_ADDR_VAR 0 11
18772: PUSH
18773: EMPTY
18774: ST_TO_ADDR
// temp_list_3 = [ ] ;
18775: LD_ADDR_VAR 0 6
18779: PUSH
18780: EMPTY
18781: ST_TO_ADDR
// for i in ai_vehicle_pullback_hexes [ base ] do
18782: LD_ADDR_VAR 0 3
18786: PUSH
18787: LD_EXP 30
18791: PUSH
18792: LD_VAR 0 2
18796: ARRAY
18797: PUSH
18798: FOR_IN
18799: IFFALSE 19096
// begin temp_unit = HexInfo ( i [ 1 ] , i [ 2 ] ) ;
18801: LD_ADDR_VAR 0 7
18805: PUSH
18806: LD_VAR 0 3
18810: PUSH
18811: LD_INT 1
18813: ARRAY
18814: PPUSH
18815: LD_VAR 0 3
18819: PUSH
18820: LD_INT 2
18822: ARRAY
18823: PPUSH
18824: CALL_OW 428
18828: ST_TO_ADDR
// if temp_unit in ai_vehicles_defend [ base ] then
18829: LD_VAR 0 7
18833: PUSH
18834: LD_EXP 28
18838: PUSH
18839: LD_VAR 0 2
18843: ARRAY
18844: IN
18845: IFFALSE 18970
// begin if temp_unit = escape_cargo_bay then
18847: LD_VAR 0 7
18851: PUSH
18852: LD_EXP 64
18856: EQUAL
18857: IFFALSE 18861
// continue ;
18859: GO 18798
// temp_list_3 = temp_list_3 ^ temp_unit ;
18861: LD_ADDR_VAR 0 6
18865: PUSH
18866: LD_VAR 0 6
18870: PUSH
18871: LD_VAR 0 7
18875: ADD
18876: ST_TO_ADDR
// if not under_attack and not temp_unit in ( ai_refuel_vehicles_list [ base ] ^ ai_vehicles_attack [ base ] ^ ai_vehicle_being_moved [ base ] ^ ai_vehicles_having_been_moved [ base ] ) then
18877: LD_VAR 0 10
18881: NOT
18882: PUSH
18883: LD_VAR 0 7
18887: PUSH
18888: LD_EXP 46
18892: PUSH
18893: LD_VAR 0 2
18897: ARRAY
18898: PUSH
18899: LD_EXP 29
18903: PUSH
18904: LD_VAR 0 2
18908: ARRAY
18909: ADD
18910: PUSH
18911: LD_EXP 36
18915: PUSH
18916: LD_VAR 0 2
18920: ARRAY
18921: ADD
18922: PUSH
18923: LD_EXP 59
18927: PUSH
18928: LD_VAR 0 2
18932: ARRAY
18933: ADD
18934: IN
18935: NOT
18936: AND
18937: IFFALSE 18968
// begin if GetControl ( temp_unit ) = control_manual then
18939: LD_VAR 0 7
18943: PPUSH
18944: CALL_OW 263
18948: PUSH
18949: LD_INT 1
18951: EQUAL
18952: IFFALSE 18968
// begin ComExitVehicle ( IsDrivenBy ( temp_unit ) ) ;
18954: LD_VAR 0 7
18958: PPUSH
18959: CALL_OW 311
18963: PPUSH
18964: CALL_OW 121
// end ; end ; end else
18968: GO 19094
// if temp_unit = 0 or not ( GetType ( temp_unit ) = unit_building or ( GetType ( temp_unit ) = unit_vehicle and ( ( GetControl ( temp_unit ) = control_manual and IsDrivenBy ( temp_unit ) = 0 ) or ( GetControl ( temp_unit ) = control_remote and IsControledBy ( temp_unit ) = 0 ) ) ) ) then
18970: LD_VAR 0 7
18974: PUSH
18975: LD_INT 0
18977: EQUAL
18978: PUSH
18979: LD_VAR 0 7
18983: PPUSH
18984: CALL_OW 247
18988: PUSH
18989: LD_INT 3
18991: EQUAL
18992: PUSH
18993: LD_VAR 0 7
18997: PPUSH
18998: CALL_OW 247
19002: PUSH
19003: LD_INT 2
19005: EQUAL
19006: PUSH
19007: LD_VAR 0 7
19011: PPUSH
19012: CALL_OW 263
19016: PUSH
19017: LD_INT 1
19019: EQUAL
19020: PUSH
19021: LD_VAR 0 7
19025: PPUSH
19026: CALL_OW 311
19030: PUSH
19031: LD_INT 0
19033: EQUAL
19034: AND
19035: PUSH
19036: LD_VAR 0 7
19040: PPUSH
19041: CALL_OW 263
19045: PUSH
19046: LD_INT 2
19048: EQUAL
19049: PUSH
19050: LD_VAR 0 7
19054: PPUSH
19055: CALL_OW 312
19059: PUSH
19060: LD_INT 0
19062: EQUAL
19063: AND
19064: OR
19065: AND
19066: OR
19067: NOT
19068: OR
19069: IFFALSE 19094
// free_parking_spots = Insert ( free_parking_spots , 1 , i ) ;
19071: LD_ADDR_VAR 0 11
19075: PUSH
19076: LD_VAR 0 11
19080: PPUSH
19081: LD_INT 1
19083: PPUSH
19084: LD_VAR 0 3
19088: PPUSH
19089: CALL_OW 2
19093: ST_TO_ADDR
// end ;
19094: GO 18798
19096: POP
19097: POP
// if under_attack then
19098: LD_VAR 0 10
19102: IFFALSE 19512
// begin allowed_to_repair_vehicles = temp_list_3 ;
19104: LD_ADDR_VAR 0 9
19108: PUSH
19109: LD_VAR 0 6
19113: ST_TO_ADDR
// vehicles_list = UnitFilter ( ( ai_vehicles_being_repaired [ base ] ^ ai_retreating_vehicles_defend [ base ] ) diff temp_list_3 , [ f_ok ] ) ;
19114: LD_ADDR_VAR 0 8
19118: PUSH
19119: LD_EXP 47
19123: PUSH
19124: LD_VAR 0 2
19128: ARRAY
19129: PUSH
19130: LD_EXP 43
19134: PUSH
19135: LD_VAR 0 2
19139: ARRAY
19140: ADD
19141: PUSH
19142: LD_VAR 0 6
19146: DIFF
19147: PPUSH
19148: LD_INT 50
19150: PUSH
19151: EMPTY
19152: LIST
19153: PPUSH
19154: CALL_OW 72
19158: ST_TO_ADDR
// temp_list = [ ] ;
19159: LD_ADDR_VAR 0 5
19163: PUSH
19164: EMPTY
19165: ST_TO_ADDR
// temp_list_3 = temp_list_3 isect UnitFilter ( ai_vehicles_being_repaired [ base ] ^ ai_retreating_vehicles_defend [ base ] , [ f_ok ] ) ;
19166: LD_ADDR_VAR 0 6
19170: PUSH
19171: LD_VAR 0 6
19175: PUSH
19176: LD_EXP 47
19180: PUSH
19181: LD_VAR 0 2
19185: ARRAY
19186: PUSH
19187: LD_EXP 43
19191: PUSH
19192: LD_VAR 0 2
19196: ARRAY
19197: ADD
19198: PPUSH
19199: LD_INT 50
19201: PUSH
19202: EMPTY
19203: LIST
19204: PPUSH
19205: CALL_OW 72
19209: ISECT
19210: ST_TO_ADDR
// for i in temp_list_3 do
19211: LD_ADDR_VAR 0 3
19215: PUSH
19216: LD_VAR 0 6
19220: PUSH
19221: FOR_IN
19222: IFFALSE 19279
// if UnitShoot ( i ) > 0 and GetSide ( UnitShoot ( i ) ) <> side then
19224: LD_VAR 0 3
19228: PPUSH
19229: CALL_OW 504
19233: PUSH
19234: LD_INT 0
19236: GREATER
19237: PUSH
19238: LD_VAR 0 3
19242: PPUSH
19243: CALL_OW 504
19247: PPUSH
19248: CALL_OW 255
19252: PUSH
19253: LD_VAR 0 1
19257: NONEQUAL
19258: AND
19259: IFFALSE 19277
// temp_list = temp_list ^ i ;
19261: LD_ADDR_VAR 0 5
19265: PUSH
19266: LD_VAR 0 5
19270: PUSH
19271: LD_VAR 0 3
19275: ADD
19276: ST_TO_ADDR
19277: GO 19221
19279: POP
19280: POP
// for i in ai_mechanics_defend [ base ] do
19281: LD_ADDR_VAR 0 3
19285: PUSH
19286: LD_EXP 19
19290: PUSH
19291: LD_VAR 0 2
19295: ARRAY
19296: PUSH
19297: FOR_IN
19298: IFFALSE 19382
// if UnitShoot ( i ) > 0 and GetSide ( UnitShoot ( i ) ) <> side then
19300: LD_VAR 0 3
19304: PPUSH
19305: CALL_OW 504
19309: PUSH
19310: LD_INT 0
19312: GREATER
19313: PUSH
19314: LD_VAR 0 3
19318: PPUSH
19319: CALL_OW 504
19323: PPUSH
19324: CALL_OW 255
19328: PUSH
19329: LD_VAR 0 1
19333: NONEQUAL
19334: AND
19335: IFFALSE 19380
// temp_list = temp_list ^ UnitFilter ( temp_list_3 diff temp_list , [ f_dist , i , 5 ] ) ;
19337: LD_ADDR_VAR 0 5
19341: PUSH
19342: LD_VAR 0 5
19346: PUSH
19347: LD_VAR 0 6
19351: PUSH
19352: LD_VAR 0 5
19356: DIFF
19357: PPUSH
19358: LD_INT 91
19360: PUSH
19361: LD_VAR 0 3
19365: PUSH
19366: LD_INT 5
19368: PUSH
19369: EMPTY
19370: LIST
19371: LIST
19372: LIST
19373: PPUSH
19374: CALL_OW 72
19378: ADD
19379: ST_TO_ADDR
19380: GO 19297
19382: POP
19383: POP
// for i in temp_list_3 diff temp_list do
19384: LD_ADDR_VAR 0 3
19388: PUSH
19389: LD_VAR 0 6
19393: PUSH
19394: LD_VAR 0 5
19398: DIFF
19399: PUSH
19400: FOR_IN
19401: IFFALSE 19434
// if GetControl ( i ) = control_manual then
19403: LD_VAR 0 3
19407: PPUSH
19408: CALL_OW 263
19412: PUSH
19413: LD_INT 1
19415: EQUAL
19416: IFFALSE 19432
// begin ComExitVehicle ( IsDrivenBy ( i ) ) ;
19418: LD_VAR 0 3
19422: PPUSH
19423: CALL_OW 311
19427: PPUSH
19428: CALL_OW 121
// end ;
19432: GO 19400
19434: POP
19435: POP
// temp_list = FindDriverHelper ( UnitFilter ( temp_list , [ [ f_empty ] , [ f_ok ] ] ) , mechanics_list , vehicles_drivers ) ;
19436: LD_ADDR_VAR 0 5
19440: PUSH
19441: LD_VAR 0 5
19445: PPUSH
19446: LD_INT 58
19448: PUSH
19449: EMPTY
19450: LIST
19451: PUSH
19452: LD_INT 50
19454: PUSH
19455: EMPTY
19456: LIST
19457: PUSH
19458: EMPTY
19459: LIST
19460: LIST
19461: PPUSH
19462: CALL_OW 72
19466: PPUSH
19467: LD_VAR 0 4
19471: PPUSH
19472: LD_VAR 0 13
19476: PPUSH
19477: CALL 20478 0 3
19481: ST_TO_ADDR
// mechanics_list = temp_list [ 1 ] ;
19482: LD_ADDR_VAR 0 4
19486: PUSH
19487: LD_VAR 0 5
19491: PUSH
19492: LD_INT 1
19494: ARRAY
19495: ST_TO_ADDR
// vehicles_drivers = temp_list [ 2 ] ;
19496: LD_ADDR_VAR 0 13
19500: PUSH
19501: LD_VAR 0 5
19505: PUSH
19506: LD_INT 2
19508: ARRAY
19509: ST_TO_ADDR
// end else
19510: GO 19777
// begin allowed_to_repair_vehicles = ai_vehicles_defend [ base ] diff ( ai_refuel_vehicles_list [ base ] ^ ai_vehicles_having_been_moved [ base ] ^ ai_vehicle_being_moved [ base ] ) ;
19512: LD_ADDR_VAR 0 9
19516: PUSH
19517: LD_EXP 28
19521: PUSH
19522: LD_VAR 0 2
19526: ARRAY
19527: PUSH
19528: LD_EXP 46
19532: PUSH
19533: LD_VAR 0 2
19537: ARRAY
19538: PUSH
19539: LD_EXP 59
19543: PUSH
19544: LD_VAR 0 2
19548: ARRAY
19549: ADD
19550: PUSH
19551: LD_EXP 36
19555: PUSH
19556: LD_VAR 0 2
19560: ARRAY
19561: ADD
19562: DIFF
19563: ST_TO_ADDR
// i = 1 ;
19564: LD_ADDR_VAR 0 3
19568: PUSH
19569: LD_INT 1
19571: ST_TO_ADDR
// while i <= allowed_to_repair_vehicles do
19572: LD_VAR 0 3
19576: PUSH
19577: LD_VAR 0 9
19581: LESSEQUAL
19582: IFFALSE 19666
// begin if not IsOk ( allowed_to_repair_vehicles [ i ] ) and GetDistUnitArea ( allowed_to_repair_vehicles [ i ] , area ) > 7 then
19584: LD_VAR 0 9
19588: PUSH
19589: LD_VAR 0 3
19593: ARRAY
19594: PPUSH
19595: CALL_OW 302
19599: NOT
19600: PUSH
19601: LD_VAR 0 9
19605: PUSH
19606: LD_VAR 0 3
19610: ARRAY
19611: PPUSH
19612: LD_VAR 0 15
19616: PPUSH
19617: CALL_OW 299
19621: PUSH
19622: LD_INT 7
19624: GREATER
19625: AND
19626: IFFALSE 19650
// begin allowed_to_repair_vehicles = Delete ( allowed_to_repair_vehicles , i ) ;
19628: LD_ADDR_VAR 0 9
19632: PUSH
19633: LD_VAR 0 9
19637: PPUSH
19638: LD_VAR 0 3
19642: PPUSH
19643: CALL_OW 3
19647: ST_TO_ADDR
// continue ;
19648: GO 19572
// end ; i = i + 1 ;
19650: LD_ADDR_VAR 0 3
19654: PUSH
19655: LD_VAR 0 3
19659: PUSH
19660: LD_INT 1
19662: PLUS
19663: ST_TO_ADDR
// end ;
19664: GO 19572
// vehicles_list = UnitFilter ( allowed_to_repair_vehicles diff temp_list_3 , [ f_ok ] ) ;
19666: LD_ADDR_VAR 0 8
19670: PUSH
19671: LD_VAR 0 9
19675: PUSH
19676: LD_VAR 0 6
19680: DIFF
19681: PPUSH
19682: LD_INT 50
19684: PUSH
19685: EMPTY
19686: LIST
19687: PPUSH
19688: CALL_OW 72
19692: ST_TO_ADDR
// temp_list = UnitFilter ( vehicles_list , [ [ f_empty ] , [ f_ok ] ] ) ;
19693: LD_ADDR_VAR 0 5
19697: PUSH
19698: LD_VAR 0 8
19702: PPUSH
19703: LD_INT 58
19705: PUSH
19706: EMPTY
19707: LIST
19708: PUSH
19709: LD_INT 50
19711: PUSH
19712: EMPTY
19713: LIST
19714: PUSH
19715: EMPTY
19716: LIST
19717: LIST
19718: PPUSH
19719: CALL_OW 72
19723: ST_TO_ADDR
// temp_list = FindDriverHelper ( temp_list , mechanics_list , vehicles_drivers ) ;
19724: LD_ADDR_VAR 0 5
19728: PUSH
19729: LD_VAR 0 5
19733: PPUSH
19734: LD_VAR 0 4
19738: PPUSH
19739: LD_VAR 0 13
19743: PPUSH
19744: CALL 20478 0 3
19748: ST_TO_ADDR
// mechanics_list = temp_list [ 1 ] ;
19749: LD_ADDR_VAR 0 4
19753: PUSH
19754: LD_VAR 0 5
19758: PUSH
19759: LD_INT 1
19761: ARRAY
19762: ST_TO_ADDR
// vehicles_drivers = temp_list [ 2 ] ;
19763: LD_ADDR_VAR 0 13
19767: PUSH
19768: LD_VAR 0 5
19772: PUSH
19773: LD_INT 2
19775: ARRAY
19776: ST_TO_ADDR
// end ; for i in vehicles_list do
19777: LD_ADDR_VAR 0 3
19781: PUSH
19782: LD_VAR 0 8
19786: PUSH
19787: FOR_IN
19788: IFFALSE 19944
// if free_parking_spots > 0 then
19790: LD_VAR 0 11
19794: PUSH
19795: LD_INT 0
19797: GREATER
19798: IFFALSE 19940
// begin temp_list = [ ] ;
19800: LD_ADDR_VAR 0 5
19804: PUSH
19805: EMPTY
19806: ST_TO_ADDR
// for k in free_parking_spots do
19807: LD_ADDR_VAR 0 12
19811: PUSH
19812: LD_VAR 0 11
19816: PUSH
19817: FOR_IN
19818: IFFALSE 19861
// temp_list = temp_list ^ GetDistUnitXY ( i , k [ 1 ] , k [ 2 ] ) ;
19820: LD_ADDR_VAR 0 5
19824: PUSH
19825: LD_VAR 0 5
19829: PUSH
19830: LD_VAR 0 3
19834: PPUSH
19835: LD_VAR 0 12
19839: PUSH
19840: LD_INT 1
19842: ARRAY
19843: PPUSH
19844: LD_VAR 0 12
19848: PUSH
19849: LD_INT 2
19851: ARRAY
19852: PPUSH
19853: CALL_OW 297
19857: ADD
19858: ST_TO_ADDR
19859: GO 19817
19861: POP
19862: POP
// temp_list = WorstFromListByList ( free_parking_spots , temp_list ) ;
19863: LD_ADDR_VAR 0 5
19867: PUSH
19868: LD_VAR 0 11
19872: PPUSH
19873: LD_VAR 0 5
19877: PPUSH
19878: CALL_OW 78
19882: ST_TO_ADDR
// ComMoveXY ( i , temp_list [ 1 ] , temp_list [ 2 ] ) ;
19883: LD_VAR 0 3
19887: PPUSH
19888: LD_VAR 0 5
19892: PUSH
19893: LD_INT 1
19895: ARRAY
19896: PPUSH
19897: LD_VAR 0 5
19901: PUSH
19902: LD_INT 2
19904: ARRAY
19905: PPUSH
19906: CALL_OW 111
// AddComHold ( i ) ;
19910: LD_VAR 0 3
19914: PPUSH
19915: CALL_OW 200
// free_parking_spots = free_parking_spots diff [ temp_list ] ;
19919: LD_ADDR_VAR 0 11
19923: PUSH
19924: LD_VAR 0 11
19928: PUSH
19929: LD_VAR 0 5
19933: PUSH
19934: EMPTY
19935: LIST
19936: DIFF
19937: ST_TO_ADDR
// end else
19938: GO 19942
// break ;
19940: GO 19944
19942: GO 19787
19944: POP
19945: POP
// if mechanics_list = 0 then
19946: LD_VAR 0 4
19950: PUSH
19951: LD_INT 0
19953: EQUAL
19954: IFFALSE 19958
// continue ;
19956: GO 17387
// if not under_attack and not IsDead ( Gossudarov ) and not IsDead ( escape_cargo_bay ) and IsInArea ( escape_cargo_bay , ru_base_area ) and gossudarov_escape_status = 0 then
19958: LD_VAR 0 10
19962: NOT
19963: PUSH
19964: LD_EXP 13
19968: PPUSH
19969: CALL_OW 301
19973: NOT
19974: AND
19975: PUSH
19976: LD_EXP 64
19980: PPUSH
19981: CALL_OW 301
19985: NOT
19986: AND
19987: PUSH
19988: LD_EXP 64
19992: PPUSH
19993: LD_INT 1
19995: PPUSH
19996: CALL_OW 308
20000: AND
20001: PUSH
20002: LD_EXP 88
20006: PUSH
20007: LD_INT 0
20009: EQUAL
20010: AND
20011: IFFALSE 20029
// allowed_to_repair_vehicles = allowed_to_repair_vehicles ^ escape_cargo_bay ;
20013: LD_ADDR_VAR 0 9
20017: PUSH
20018: LD_VAR 0 9
20022: PUSH
20023: LD_EXP 64
20027: ADD
20028: ST_TO_ADDR
// allowed_to_repair_vehicles = UnitFilter ( allowed_to_repair_vehicles , [ f_not , [ f_lives , 1000 ] ] ) diff ai_vehicles_being_repaired [ base ] ;
20029: LD_ADDR_VAR 0 9
20033: PUSH
20034: LD_VAR 0 9
20038: PPUSH
20039: LD_INT 3
20041: PUSH
20042: LD_INT 24
20044: PUSH
20045: LD_INT 1000
20047: PUSH
20048: EMPTY
20049: LIST
20050: LIST
20051: PUSH
20052: EMPTY
20053: LIST
20054: LIST
20055: PPUSH
20056: CALL_OW 72
20060: PUSH
20061: LD_EXP 47
20065: PUSH
20066: LD_VAR 0 2
20070: ARRAY
20071: DIFF
20072: ST_TO_ADDR
// if allowed_to_repair_vehicles > 0 or ai_vehicles_being_repaired [ base ] > 0 then
20073: LD_VAR 0 9
20077: PUSH
20078: LD_INT 0
20080: GREATER
20081: PUSH
20082: LD_EXP 47
20086: PUSH
20087: LD_VAR 0 2
20091: ARRAY
20092: PUSH
20093: LD_INT 0
20095: GREATER
20096: OR
20097: IFFALSE 20402
// begin if allowed_to_repair_vehicles > 0 then
20099: LD_VAR 0 9
20103: PUSH
20104: LD_INT 0
20106: GREATER
20107: IFFALSE 20371
// begin k = false ;
20109: LD_ADDR_VAR 0 12
20113: PUSH
20114: LD_INT 0
20116: ST_TO_ADDR
// if ai_vehicles_being_repaired [ base ] = 0 then
20117: LD_EXP 47
20121: PUSH
20122: LD_VAR 0 2
20126: ARRAY
20127: PUSH
20128: LD_INT 0
20130: EQUAL
20131: IFFALSE 20143
// k = true else
20133: LD_ADDR_VAR 0 12
20137: PUSH
20138: LD_INT 1
20140: ST_TO_ADDR
20141: GO 20206
// if IsOk ( ai_vehicles_being_repaired [ base ] [ 1 ] ) then
20143: LD_EXP 47
20147: PUSH
20148: LD_VAR 0 2
20152: ARRAY
20153: PUSH
20154: LD_INT 1
20156: ARRAY
20157: PPUSH
20158: CALL_OW 302
20162: IFFALSE 20206
// begin allowed_to_repair_vehicles = UnitFilter ( allowed_to_repair_vehicles , [ f_not , [ f_ok ] ] ) ;
20164: LD_ADDR_VAR 0 9
20168: PUSH
20169: LD_VAR 0 9
20173: PPUSH
20174: LD_INT 3
20176: PUSH
20177: LD_INT 50
20179: PUSH
20180: EMPTY
20181: LIST
20182: PUSH
20183: EMPTY
20184: LIST
20185: LIST
20186: PPUSH
20187: CALL_OW 72
20191: ST_TO_ADDR
// k := allowed_to_repair_vehicles > 0 ;
20192: LD_ADDR_VAR 0 12
20196: PUSH
20197: LD_VAR 0 9
20201: PUSH
20202: LD_INT 0
20204: GREATER
20205: ST_TO_ADDR
// end ; if k then
20206: LD_VAR 0 12
20210: IFFALSE 20371
// begin temp_list = [ ] ;
20212: LD_ADDR_VAR 0 5
20216: PUSH
20217: EMPTY
20218: ST_TO_ADDR
// for i in allowed_to_repair_vehicles do
20219: LD_ADDR_VAR 0 3
20223: PUSH
20224: LD_VAR 0 9
20228: PUSH
20229: FOR_IN
20230: IFFALSE 20255
// temp_list = temp_list ^ GetLives ( i ) ;
20232: LD_ADDR_VAR 0 5
20236: PUSH
20237: LD_VAR 0 5
20241: PUSH
20242: LD_VAR 0 3
20246: PPUSH
20247: CALL_OW 256
20251: ADD
20252: ST_TO_ADDR
20253: GO 20229
20255: POP
20256: POP
// temp_unit = WorstFromListByList ( allowed_to_repair_vehicles , temp_list ) ;
20257: LD_ADDR_VAR 0 7
20261: PUSH
20262: LD_VAR 0 9
20266: PPUSH
20267: LD_VAR 0 5
20271: PPUSH
20272: CALL_OW 78
20276: ST_TO_ADDR
// temp_list = temp_unit ^ ai_vehicles_being_repaired [ base ] ;
20277: LD_ADDR_VAR 0 5
20281: PUSH
20282: LD_VAR 0 7
20286: PUSH
20287: LD_EXP 47
20291: PUSH
20292: LD_VAR 0 2
20296: ARRAY
20297: ADD
20298: ST_TO_ADDR
// ai_vehicles_being_repaired = Replace ( ai_vehicles_being_repaired , base , temp_list ) ;
20299: LD_ADDR_EXP 47
20303: PUSH
20304: LD_EXP 47
20308: PPUSH
20309: LD_VAR 0 2
20313: PPUSH
20314: LD_VAR 0 5
20318: PPUSH
20319: CALL_OW 1
20323: ST_TO_ADDR
// temp_list = ai_retreating_vehicles_defend [ base ] diff temp_unit ;
20324: LD_ADDR_VAR 0 5
20328: PUSH
20329: LD_EXP 43
20333: PUSH
20334: LD_VAR 0 2
20338: ARRAY
20339: PUSH
20340: LD_VAR 0 7
20344: DIFF
20345: ST_TO_ADDR
// ai_retreating_vehicles_defend = Replace ( ai_retreating_vehicles_defend , base , temp_list ) ;
20346: LD_ADDR_EXP 43
20350: PUSH
20351: LD_EXP 43
20355: PPUSH
20356: LD_VAR 0 2
20360: PPUSH
20361: LD_VAR 0 5
20365: PPUSH
20366: CALL_OW 1
20370: ST_TO_ADDR
// end ; end ; ComRepairVehicle ( GetHumansOutOfUnits ( mechanics_list ) , ai_vehicles_being_repaired [ base ] [ 1 ] ) ;
20371: LD_VAR 0 4
20375: PPUSH
20376: CALL 16563 0 1
20380: PPUSH
20381: LD_EXP 47
20385: PUSH
20386: LD_VAR 0 2
20390: ARRAY
20391: PUSH
20392: LD_INT 1
20394: ARRAY
20395: PPUSH
20396: CALL_OW 129
// end else
20400: GO 20467
// begin DistributeHumansToBuildings ( base , mechanics_list , UnitFilter ( ai_facts [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_mechanic , 6 , true , false ) ;
20402: LD_VAR 0 2
20406: PPUSH
20407: LD_VAR 0 4
20411: PPUSH
20412: LD_EXP 38
20416: PUSH
20417: LD_VAR 0 2
20421: ARRAY
20422: PPUSH
20423: LD_INT 50
20425: PUSH
20426: EMPTY
20427: LIST
20428: PUSH
20429: LD_INT 3
20431: PUSH
20432: LD_INT 57
20434: PUSH
20435: EMPTY
20436: LIST
20437: PUSH
20438: EMPTY
20439: LIST
20440: LIST
20441: PUSH
20442: EMPTY
20443: LIST
20444: LIST
20445: PPUSH
20446: CALL_OW 72
20450: PPUSH
20451: LD_INT 3
20453: PPUSH
20454: LD_INT 6
20456: PPUSH
20457: LD_INT 1
20459: PPUSH
20460: LD_INT 0
20462: PPUSH
20463: CALL 11632 0 7
// end ; end ;
20467: GO 17387
20469: POP
20470: POP
// until false ;
20471: LD_INT 0
20473: IFFALSE 17370
// end ;
20475: PPOPN 15
20477: END
// function FindDriverHelper ( vehicles_list , mechanics_list , vehicles_drivers ) ; var i , k , temp_unit ; begin
20478: LD_INT 0
20480: PPUSH
20481: PPUSH
20482: PPUSH
20483: PPUSH
// for i in vehicles_list do
20484: LD_ADDR_VAR 0 5
20488: PUSH
20489: LD_VAR 0 1
20493: PUSH
20494: FOR_IN
20495: IFFALSE 20763
// begin if mechanics_list = 0 then
20497: LD_VAR 0 2
20501: PUSH
20502: LD_INT 0
20504: EQUAL
20505: IFFALSE 20509
// break ;
20507: GO 20763
// k = false ;
20509: LD_ADDR_VAR 0 6
20513: PUSH
20514: LD_INT 0
20516: ST_TO_ADDR
// if vehicles_drivers < i then
20517: LD_VAR 0 3
20521: PUSH
20522: LD_VAR 0 5
20526: LESS
20527: IFFALSE 20539
// k = true else
20529: LD_ADDR_VAR 0 6
20533: PUSH
20534: LD_INT 1
20536: ST_TO_ADDR
20537: GO 20566
// if not vehicles_drivers [ i ] in mechanics_list then
20539: LD_VAR 0 3
20543: PUSH
20544: LD_VAR 0 5
20548: ARRAY
20549: PUSH
20550: LD_VAR 0 2
20554: IN
20555: NOT
20556: IFFALSE 20566
// k = true ;
20558: LD_ADDR_VAR 0 6
20562: PUSH
20563: LD_INT 1
20565: ST_TO_ADDR
// if k then
20566: LD_VAR 0 6
20570: IFFALSE 20607
// vehicles_drivers = Replace ( vehicles_drivers , i , AllNearestUnitToUnit ( mechanics_list , i ) ) ;
20572: LD_ADDR_VAR 0 3
20576: PUSH
20577: LD_VAR 0 3
20581: PPUSH
20582: LD_VAR 0 5
20586: PPUSH
20587: LD_VAR 0 2
20591: PPUSH
20592: LD_VAR 0 5
20596: PPUSH
20597: CALL_OW 75
20601: PPUSH
20602: CALL_OW 1
20606: ST_TO_ADDR
// if vehicles_drivers [ i ] > 0 then
20607: LD_VAR 0 3
20611: PUSH
20612: LD_VAR 0 5
20616: ARRAY
20617: PUSH
20618: LD_INT 0
20620: GREATER
20621: IFFALSE 20761
// begin temp_unit = IsInUnit ( vehicles_drivers [ i ] ) ;
20623: LD_ADDR_VAR 0 7
20627: PUSH
20628: LD_VAR 0 3
20632: PUSH
20633: LD_VAR 0 5
20637: ARRAY
20638: PPUSH
20639: CALL_OW 310
20643: ST_TO_ADDR
// if temp_unit <> i then
20644: LD_VAR 0 7
20648: PUSH
20649: LD_VAR 0 5
20653: NONEQUAL
20654: IFFALSE 20739
// case GetType ( temp_unit ) of unit_vehicle :
20656: LD_VAR 0 7
20660: PPUSH
20661: CALL_OW 247
20665: PUSH
20666: LD_INT 2
20668: DOUBLE
20669: EQUAL
20670: IFTRUE 20674
20672: GO 20692
20674: POP
// ComExitVehicle ( vehicles_drivers [ i ] ) ; unit_building :
20675: LD_VAR 0 3
20679: PUSH
20680: LD_VAR 0 5
20684: ARRAY
20685: PPUSH
20686: CALL_OW 121
20690: GO 20739
20692: LD_INT 3
20694: DOUBLE
20695: EQUAL
20696: IFTRUE 20700
20698: GO 20718
20700: POP
// ComExitBuilding ( vehicles_drivers [ i ] ) ; else
20701: LD_VAR 0 3
20705: PUSH
20706: LD_VAR 0 5
20710: ARRAY
20711: PPUSH
20712: CALL_OW 122
20716: GO 20739
20718: POP
// ComEnterUnit ( vehicles_drivers [ i ] , i ) ; end ;
20719: LD_VAR 0 3
20723: PUSH
20724: LD_VAR 0 5
20728: ARRAY
20729: PPUSH
20730: LD_VAR 0 5
20734: PPUSH
20735: CALL_OW 120
// mechanics_list = mechanics_list diff vehicles_drivers [ i ] ;
20739: LD_ADDR_VAR 0 2
20743: PUSH
20744: LD_VAR 0 2
20748: PUSH
20749: LD_VAR 0 3
20753: PUSH
20754: LD_VAR 0 5
20758: ARRAY
20759: DIFF
20760: ST_TO_ADDR
// end ; end ;
20761: GO 20494
20763: POP
20764: POP
// result = [ mechanics_list , vehicles_drivers ] ;
20765: LD_ADDR_VAR 0 4
20769: PUSH
20770: LD_VAR 0 2
20774: PUSH
20775: LD_VAR 0 3
20779: PUSH
20780: EMPTY
20781: LIST
20782: LIST
20783: ST_TO_ADDR
// end ;
20784: LD_VAR 0 4
20788: RET
// every 0 0$1 + 0 0$0.1 do var side , i , temp_value , temp_unit , temp_list , base , idle_factories , fact ;
20789: GO 20791
20791: DISABLE
20792: LD_INT 0
20794: PPUSH
20795: PPUSH
20796: PPUSH
20797: PPUSH
20798: PPUSH
20799: PPUSH
20800: PPUSH
20801: PPUSH
// begin side = russians ;
20802: LD_ADDR_VAR 0 1
20806: PUSH
20807: LD_EXP 3
20811: ST_TO_ADDR
// for base in ai_bases do
20812: LD_ADDR_VAR 0 6
20816: PUSH
20817: LD_EXP 49
20821: PUSH
20822: FOR_IN
20823: IFFALSE 21387
// begin idle_factories = [ ] ;
20825: LD_ADDR_VAR 0 7
20829: PUSH
20830: EMPTY
20831: ST_TO_ADDR
// for i in ai_facts [ base ] do
20832: LD_ADDR_VAR 0 2
20836: PUSH
20837: LD_EXP 38
20841: PUSH
20842: LD_VAR 0 6
20846: ARRAY
20847: PUSH
20848: FOR_IN
20849: IFFALSE 20910
// if BuildingStatus ( i ) = bs_idle and IsOk ( i ) and GetBType ( i ) = b_factory then
20851: LD_VAR 0 2
20855: PPUSH
20856: CALL_OW 461
20860: PUSH
20861: LD_INT 2
20863: EQUAL
20864: PUSH
20865: LD_VAR 0 2
20869: PPUSH
20870: CALL_OW 302
20874: AND
20875: PUSH
20876: LD_VAR 0 2
20880: PPUSH
20881: CALL_OW 266
20885: PUSH
20886: LD_INT 3
20888: EQUAL
20889: AND
20890: IFFALSE 20908
// idle_factories = idle_factories ^ i ;
20892: LD_ADDR_VAR 0 7
20896: PUSH
20897: LD_VAR 0 7
20901: PUSH
20902: LD_VAR 0 2
20906: ADD
20907: ST_TO_ADDR
20908: GO 20848
20910: POP
20911: POP
// if idle_factories = 0 then
20912: LD_VAR 0 7
20916: PUSH
20917: LD_INT 0
20919: EQUAL
20920: IFFALSE 20924
// continue ;
20922: GO 20822
// temp_value = false ;
20924: LD_ADDR_VAR 0 3
20928: PUSH
20929: LD_INT 0
20931: ST_TO_ADDR
// for i in ai_buildings_locations [ base ] do
20932: LD_ADDR_VAR 0 2
20936: PUSH
20937: LD_EXP 27
20941: PUSH
20942: LD_VAR 0 6
20946: ARRAY
20947: PUSH
20948: FOR_IN
20949: IFFALSE 21121
// if i [ 4 ] in [ b_bunker , b_turret ] then
20951: LD_VAR 0 2
20955: PUSH
20956: LD_INT 4
20958: ARRAY
20959: PUSH
20960: LD_INT 32
20962: PUSH
20963: LD_INT 33
20965: PUSH
20966: EMPTY
20967: LIST
20968: LIST
20969: IN
20970: IFFALSE 21119
// begin temp_unit = HexInfo ( i [ 1 ] , i [ 2 ] ) ;
20972: LD_ADDR_VAR 0 4
20976: PUSH
20977: LD_VAR 0 2
20981: PUSH
20982: LD_INT 1
20984: ARRAY
20985: PPUSH
20986: LD_VAR 0 2
20990: PUSH
20991: LD_INT 2
20993: ARRAY
20994: PPUSH
20995: CALL_OW 428
20999: ST_TO_ADDR
// if GetBType ( temp_unit ) in [ b_bunker , b_turret ] and not IsConstructed ( temp_unit ) and GetBWeapon ( temp_unit ) <> i [ 7 ] then
21000: LD_VAR 0 4
21004: PPUSH
21005: CALL_OW 266
21009: PUSH
21010: LD_INT 32
21012: PUSH
21013: LD_INT 33
21015: PUSH
21016: EMPTY
21017: LIST
21018: LIST
21019: IN
21020: PUSH
21021: LD_VAR 0 4
21025: PPUSH
21026: CALL_OW 304
21030: NOT
21031: AND
21032: PUSH
21033: LD_VAR 0 4
21037: PPUSH
21038: CALL_OW 269
21042: PUSH
21043: LD_VAR 0 2
21047: PUSH
21048: LD_INT 7
21050: ARRAY
21051: NONEQUAL
21052: AND
21053: IFFALSE 21111
// for fact in idle_factories do
21055: LD_ADDR_VAR 0 8
21059: PUSH
21060: LD_VAR 0 7
21064: PUSH
21065: FOR_IN
21066: IFFALSE 21109
// if IsWeaponFactory ( fact ) then
21068: LD_VAR 0 8
21072: PPUSH
21073: CALL 21393 0 1
21077: IFFALSE 21107
// begin ComPlaceWeapon ( temp_unit , i [ 7 ] ) ;
21079: LD_VAR 0 4
21083: PPUSH
21084: LD_VAR 0 2
21088: PUSH
21089: LD_INT 7
21091: ARRAY
21092: PPUSH
21093: CALL_OW 148
// temp_value = true ;
21097: LD_ADDR_VAR 0 3
21101: PUSH
21102: LD_INT 1
21104: ST_TO_ADDR
// break ;
21105: GO 21109
// end ;
21107: GO 21065
21109: POP
21110: POP
// if temp_value then
21111: LD_VAR 0 3
21115: IFFALSE 21119
// break ;
21117: GO 21121
// end ;
21119: GO 20948
21121: POP
21122: POP
// if temp_value then
21123: LD_VAR 0 3
21127: IFFALSE 21131
// continue ;
21129: GO 20822
// if ai_vehicles_defend [ base ] + ai_vehicles_attack [ base ] < WorstFromListByList ( [ num_base_vehicles , ai_mechanics_defend [ base ] + 0 ] , [ num_base_vehicles , ai_mechanics_defend [ base ] + 0 ] ) and rus_num_vehicle_rebuild > 0 then
21131: LD_EXP 28
21135: PUSH
21136: LD_VAR 0 6
21140: ARRAY
21141: PUSH
21142: LD_EXP 29
21146: PUSH
21147: LD_VAR 0 6
21151: ARRAY
21152: PLUS
21153: PUSH
21154: LD_EXP 90
21158: PUSH
21159: LD_EXP 19
21163: PUSH
21164: LD_VAR 0 6
21168: ARRAY
21169: PUSH
21170: LD_INT 0
21172: PLUS
21173: PUSH
21174: EMPTY
21175: LIST
21176: LIST
21177: PPUSH
21178: LD_EXP 90
21182: PUSH
21183: LD_EXP 19
21187: PUSH
21188: LD_VAR 0 6
21192: ARRAY
21193: PUSH
21194: LD_INT 0
21196: PLUS
21197: PUSH
21198: EMPTY
21199: LIST
21200: LIST
21201: PPUSH
21202: CALL_OW 78
21206: LESS
21207: PUSH
21208: LD_EXP 66
21212: PUSH
21213: LD_INT 0
21215: GREATER
21216: AND
21217: IFFALSE 21385
// case side of russians :
21219: LD_VAR 0 1
21223: PUSH
21224: LD_EXP 3
21228: DOUBLE
21229: EQUAL
21230: IFTRUE 21234
21232: GO 21384
21234: POP
// begin InitiateRussianVehicleVariables ;
21235: CALL 7999 0 0
// if not IsWeaponFactory ( idle_factories [ 1 ] ) then
21239: LD_VAR 0 7
21243: PUSH
21244: LD_INT 1
21246: ARRAY
21247: PPUSH
21248: CALL 21393 0 1
21252: NOT
21253: IFFALSE 21263
// vc_weapon = ru_heavy_machine_gun ;
21255: LD_ADDR_OWVAR 40
21259: PUSH
21260: LD_INT 42
21262: ST_TO_ADDR
// if FilterAllUnits ( [ [ f_dist , idle_factories [ 1 ] , 4 ] , [ f_btype , b_ext_track ] ] ) = 0 then
21263: LD_INT 91
21265: PUSH
21266: LD_VAR 0 7
21270: PUSH
21271: LD_INT 1
21273: ARRAY
21274: PUSH
21275: LD_INT 4
21277: PUSH
21278: EMPTY
21279: LIST
21280: LIST
21281: LIST
21282: PUSH
21283: LD_INT 30
21285: PUSH
21286: LD_INT 16
21288: PUSH
21289: EMPTY
21290: LIST
21291: LIST
21292: PUSH
21293: EMPTY
21294: LIST
21295: LIST
21296: PPUSH
21297: CALL_OW 69
21301: PUSH
21302: LD_INT 0
21304: EQUAL
21305: IFFALSE 21335
// if vc_chassis = ru_medium_tracked then
21307: LD_OWVAR 37
21311: PUSH
21312: LD_INT 22
21314: EQUAL
21315: IFFALSE 21327
// vc_chassis = ru_medium_wheeled else
21317: LD_ADDR_OWVAR 37
21321: PUSH
21322: LD_INT 21
21324: ST_TO_ADDR
21325: GO 21335
// vc_chassis = ru_heavy_wheeled ;
21327: LD_ADDR_OWVAR 37
21331: PUSH
21332: LD_INT 23
21334: ST_TO_ADDR
// ComConstruct ( idle_factories [ 1 ] , vc_chassis , vc_engine , vc_control , vc_weapon ) ;
21335: LD_VAR 0 7
21339: PUSH
21340: LD_INT 1
21342: ARRAY
21343: PPUSH
21344: LD_OWVAR 37
21348: PPUSH
21349: LD_OWVAR 39
21353: PPUSH
21354: LD_OWVAR 38
21358: PPUSH
21359: LD_OWVAR 40
21363: PPUSH
21364: CALL_OW 125
// rus_num_vehicle_rebuild = rus_num_vehicle_rebuild - 1 ;
21368: LD_ADDR_EXP 66
21372: PUSH
21373: LD_EXP 66
21377: PUSH
21378: LD_INT 1
21380: MINUS
21381: ST_TO_ADDR
// end ; end ;
21382: GO 21385
21384: POP
// end ;
21385: GO 20822
21387: POP
21388: POP
// enable ;
21389: ENABLE
// end ;
21390: PPOPN 8
21392: END
// function IsWeaponFactory ( factory ) ; begin
21393: LD_INT 0
21395: PPUSH
// if FilterAllUnits ( [ [ f_dist , factory , 4 ] , [ f_btype , b_ext_gun ] ] ) > 0 then
21396: LD_INT 91
21398: PUSH
21399: LD_VAR 0 1
21403: PUSH
21404: LD_INT 4
21406: PUSH
21407: EMPTY
21408: LIST
21409: LIST
21410: LIST
21411: PUSH
21412: LD_INT 30
21414: PUSH
21415: LD_INT 17
21417: PUSH
21418: EMPTY
21419: LIST
21420: LIST
21421: PUSH
21422: EMPTY
21423: LIST
21424: LIST
21425: PPUSH
21426: CALL_OW 69
21430: PUSH
21431: LD_INT 0
21433: GREATER
21434: IFFALSE 21446
// result = true else
21436: LD_ADDR_VAR 0 2
21440: PUSH
21441: LD_INT 1
21443: ST_TO_ADDR
21444: GO 21454
// result = false ;
21446: LD_ADDR_VAR 0 2
21450: PUSH
21451: LD_INT 0
21453: ST_TO_ADDR
// end ;
21454: LD_VAR 0 2
21458: RET
// on VehicleCaptured ( new_identifier , old_identifier , old_side , capturing_unit ) do var temp_list , base ;
21459: LD_INT 0
21461: PPUSH
21462: PPUSH
// begin vehicle_captured_events = vehicle_captured_events ^ [ [ old_identifier , new_identifier ] ] ;
21463: LD_ADDR_EXP 103
21467: PUSH
21468: LD_EXP 103
21472: PUSH
21473: LD_VAR 0 2
21477: PUSH
21478: LD_VAR 0 1
21482: PUSH
21483: EMPTY
21484: LIST
21485: LIST
21486: PUSH
21487: EMPTY
21488: LIST
21489: ADD
21490: ST_TO_ADDR
// if old_identifier in traitors_vehicles then
21491: LD_VAR 0 2
21495: PUSH
21496: LD_EXP 69
21500: IN
21501: IFFALSE 21525
// begin traitors_vehicles = ( traitors_vehicles diff old_identifier ) ^ new_identifier ;
21503: LD_ADDR_EXP 69
21507: PUSH
21508: LD_EXP 69
21512: PUSH
21513: LD_VAR 0 2
21517: DIFF
21518: PUSH
21519: LD_VAR 0 1
21523: ADD
21524: ST_TO_ADDR
// end ; if old_side <> russians then
21525: LD_VAR 0 3
21529: PUSH
21530: LD_EXP 3
21534: NONEQUAL
21535: IFFALSE 21539
// exit ;
21537: GO 21600
// for base in ai_bases do
21539: LD_ADDR_VAR 0 6
21543: PUSH
21544: LD_EXP 49
21548: PUSH
21549: FOR_IN
21550: IFFALSE 21568
// RemoveVehicleFromVariables ( base , old_identifier ) ;
21552: LD_VAR 0 6
21556: PPUSH
21557: LD_VAR 0 2
21561: PPUSH
21562: CALL 9358 0 2
21566: GO 21549
21568: POP
21569: POP
// if old_identifier = escape_cargo_bay then
21570: LD_VAR 0 2
21574: PUSH
21575: LD_EXP 64
21579: EQUAL
21580: IFFALSE 21600
// begin escape_cargo_bay = new_identifier ;
21582: LD_ADDR_EXP 64
21586: PUSH
21587: LD_VAR 0 1
21591: ST_TO_ADDR
// artifact_cargo_bay_status = 2 ;
21592: LD_ADDR_EXP 94
21596: PUSH
21597: LD_INT 2
21599: ST_TO_ADDR
// end ; end ;
21600: PPOPN 6
21602: END
// on VehicleConstructed ( vehicle , factory ) do var side , temp_list , base ;
21603: LD_INT 0
21605: PPUSH
21606: PPUSH
21607: PPUSH
// begin side = GetSide ( vehicle ) ;
21608: LD_ADDR_VAR 0 3
21612: PUSH
21613: LD_VAR 0 1
21617: PPUSH
21618: CALL_OW 255
21622: ST_TO_ADDR
// if side <> russians then
21623: LD_VAR 0 3
21627: PUSH
21628: LD_EXP 3
21632: NONEQUAL
21633: IFFALSE 21637
// exit ;
21635: GO 21757
// base = 1 ;
21637: LD_ADDR_VAR 0 5
21641: PUSH
21642: LD_INT 1
21644: ST_TO_ADDR
// if GetWeapon ( vehicle ) <> ru_cargo_bay then
21645: LD_VAR 0 1
21649: PPUSH
21650: CALL_OW 264
21654: PUSH
21655: LD_INT 51
21657: NONEQUAL
21658: IFFALSE 21709
// begin temp_list = ai_vehicles_defend [ base ] ^ vehicle ;
21660: LD_ADDR_VAR 0 4
21664: PUSH
21665: LD_EXP 28
21669: PUSH
21670: LD_VAR 0 5
21674: ARRAY
21675: PUSH
21676: LD_VAR 0 1
21680: ADD
21681: ST_TO_ADDR
// ai_vehicles_defend = Replace ( ai_vehicles_defend , base , temp_list ) ;
21682: LD_ADDR_EXP 28
21686: PUSH
21687: LD_EXP 28
21691: PPUSH
21692: LD_VAR 0 5
21696: PPUSH
21697: LD_VAR 0 4
21701: PPUSH
21702: CALL_OW 1
21706: ST_TO_ADDR
// end else
21707: GO 21757
// begin ai_cargo_bay = Replace ( ai_cargo_bay , base , vehicle ) ;
21709: LD_ADDR_EXP 51
21713: PUSH
21714: LD_EXP 51
21718: PPUSH
21719: LD_VAR 0 5
21723: PPUSH
21724: LD_VAR 0 1
21728: PPUSH
21729: CALL_OW 1
21733: ST_TO_ADDR
// ai_cargo_bay_under_construction = Replace ( ai_cargo_bay_under_construction , base , false ) ;
21734: LD_ADDR_EXP 52
21738: PUSH
21739: LD_EXP 52
21743: PPUSH
21744: LD_VAR 0 5
21748: PPUSH
21749: LD_INT 0
21751: PPUSH
21752: CALL_OW 1
21756: ST_TO_ADDR
// end ; end ;
21757: PPOPN 5
21759: END
// every 0 0$5 do var base , i ;
21760: GO 21762
21762: DISABLE
21763: LD_INT 0
21765: PPUSH
21766: PPUSH
// begin for base in ai_bases do
21767: LD_ADDR_VAR 0 1
21771: PUSH
21772: LD_EXP 49
21776: PUSH
21777: FOR_IN
21778: IFFALSE 21896
// for i in ai_vehicles_attack [ base ] ^ ai_vehicles_defend [ base ] ^ ( [ ai_cargo_bay [ base ] , escape_cargo_bay , escort_veh_front , escort_veh_rear ] diff 0 ) do
21780: LD_ADDR_VAR 0 2
21784: PUSH
21785: LD_EXP 29
21789: PUSH
21790: LD_VAR 0 1
21794: ARRAY
21795: PUSH
21796: LD_EXP 28
21800: PUSH
21801: LD_VAR 0 1
21805: ARRAY
21806: ADD
21807: PUSH
21808: LD_EXP 51
21812: PUSH
21813: LD_VAR 0 1
21817: ARRAY
21818: PUSH
21819: LD_EXP 64
21823: PUSH
21824: LD_EXP 91
21828: PUSH
21829: LD_EXP 92
21833: PUSH
21834: EMPTY
21835: LIST
21836: LIST
21837: LIST
21838: LIST
21839: PUSH
21840: LD_INT 0
21842: DIFF
21843: ADD
21844: PUSH
21845: FOR_IN
21846: IFFALSE 21892
// if GetFuel ( i ) < 10 and GetEngine ( i ) = engine_combustion then
21848: LD_VAR 0 2
21852: PPUSH
21853: CALL_OW 261
21857: PUSH
21858: LD_INT 10
21860: LESS
21861: PUSH
21862: LD_VAR 0 2
21866: PPUSH
21867: CALL_OW 262
21871: PUSH
21872: LD_INT 1
21874: EQUAL
21875: AND
21876: IFFALSE 21890
// SetFuel ( i , 10 ) ;
21878: LD_VAR 0 2
21882: PPUSH
21883: LD_INT 10
21885: PPUSH
21886: CALL_OW 240
21890: GO 21845
21892: POP
21893: POP
21894: GO 21777
21896: POP
21897: POP
// enable ;
21898: ENABLE
// end ;
21899: PPOPN 2
21901: END
// every 0 0$1 do var side , i , scientists_list , temp_list , temp_unit , base , k , temp_list_3 , free_spaces , area , val , j , under_attack ;
21902: GO 21904
21904: DISABLE
21905: LD_INT 0
21907: PPUSH
21908: PPUSH
21909: PPUSH
21910: PPUSH
21911: PPUSH
21912: PPUSH
21913: PPUSH
21914: PPUSH
21915: PPUSH
21916: PPUSH
21917: PPUSH
21918: PPUSH
21919: PPUSH
// begin side = russians ;
21920: LD_ADDR_VAR 0 1
21924: PUSH
21925: LD_EXP 3
21929: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
21930: LD_INT 35
21932: PPUSH
21933: CALL_OW 67
// for base in ai_bases do
21937: LD_ADDR_VAR 0 6
21941: PUSH
21942: LD_EXP 49
21946: PUSH
21947: FOR_IN
21948: IFFALSE 22755
// begin scientists_list = ai_scientists [ base ] diff ai_heal_these_humans [ base ] ;
21950: LD_ADDR_VAR 0 3
21954: PUSH
21955: LD_EXP 21
21959: PUSH
21960: LD_VAR 0 6
21964: ARRAY
21965: PUSH
21966: LD_EXP 33
21970: PUSH
21971: LD_VAR 0 6
21975: ARRAY
21976: DIFF
21977: ST_TO_ADDR
// temp_list = ai_heal_these_humans [ base ] ;
21978: LD_ADDR_VAR 0 4
21982: PUSH
21983: LD_EXP 33
21987: PUSH
21988: LD_VAR 0 6
21992: ARRAY
21993: ST_TO_ADDR
// i = 1 ;
21994: LD_ADDR_VAR 0 2
21998: PUSH
21999: LD_INT 1
22001: ST_TO_ADDR
// while i <= scientists_list do
22002: LD_VAR 0 2
22006: PUSH
22007: LD_VAR 0 3
22011: LESSEQUAL
22012: IFFALSE 22107
// begin if GetLives ( scientists_list [ i ] ) <= 700 then
22014: LD_VAR 0 3
22018: PUSH
22019: LD_VAR 0 2
22023: ARRAY
22024: PPUSH
22025: CALL_OW 256
22029: PUSH
22030: LD_INT 700
22032: LESSEQUAL
22033: IFFALSE 22091
// begin temp_list = temp_list ^ scientists_list [ i ] ;
22035: LD_ADDR_VAR 0 4
22039: PUSH
22040: LD_VAR 0 4
22044: PUSH
22045: LD_VAR 0 3
22049: PUSH
22050: LD_VAR 0 2
22054: ARRAY
22055: ADD
22056: ST_TO_ADDR
// scientists_list = Delete ( scientists_list , i ) ;
22057: LD_ADDR_VAR 0 3
22061: PUSH
22062: LD_VAR 0 3
22066: PPUSH
22067: LD_VAR 0 2
22071: PPUSH
22072: CALL_OW 3
22076: ST_TO_ADDR
// i = i - 1 ;
22077: LD_ADDR_VAR 0 2
22081: PUSH
22082: LD_VAR 0 2
22086: PUSH
22087: LD_INT 1
22089: MINUS
22090: ST_TO_ADDR
// end ; i = i + 1 ;
22091: LD_ADDR_VAR 0 2
22095: PUSH
22096: LD_VAR 0 2
22100: PUSH
22101: LD_INT 1
22103: PLUS
22104: ST_TO_ADDR
// end ;
22105: GO 22002
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
22107: LD_ADDR_EXP 33
22111: PUSH
22112: LD_EXP 33
22116: PPUSH
22117: LD_VAR 0 6
22121: PPUSH
22122: LD_VAR 0 4
22126: PPUSH
22127: CALL_OW 1
22131: ST_TO_ADDR
// temp_list = [ ] ;
22132: LD_ADDR_VAR 0 4
22136: PUSH
22137: EMPTY
22138: ST_TO_ADDR
// for i in ai_heal_these_humans [ base ] do
22139: LD_ADDR_VAR 0 2
22143: PUSH
22144: LD_EXP 33
22148: PUSH
22149: LD_VAR 0 6
22153: ARRAY
22154: PUSH
22155: FOR_IN
22156: IFFALSE 22206
// if GetLives ( i ) < 1000 and IsInUnit ( i ) = 0 then
22158: LD_VAR 0 2
22162: PPUSH
22163: CALL_OW 256
22167: PUSH
22168: LD_INT 1000
22170: LESS
22171: PUSH
22172: LD_VAR 0 2
22176: PPUSH
22177: CALL_OW 310
22181: PUSH
22182: LD_INT 0
22184: EQUAL
22185: AND
22186: IFFALSE 22204
// temp_list = temp_list ^ i ;
22188: LD_ADDR_VAR 0 4
22192: PUSH
22193: LD_VAR 0 4
22197: PUSH
22198: LD_VAR 0 2
22202: ADD
22203: ST_TO_ADDR
22204: GO 22155
22206: POP
22207: POP
// ai_heal_these_humans = Replace ( ai_heal_these_humans , base , temp_list ) ;
22208: LD_ADDR_EXP 33
22212: PUSH
22213: LD_EXP 33
22217: PPUSH
22218: LD_VAR 0 6
22222: PPUSH
22223: LD_VAR 0 4
22227: PPUSH
22228: CALL_OW 1
22232: ST_TO_ADDR
// under_attack = BaseUnderAttack ( base , - 1 ) ;
22233: LD_ADDR_VAR 0 13
22237: PUSH
22238: LD_VAR 0 6
22242: PPUSH
22243: LD_INT 1
22245: NEG
22246: PPUSH
22247: CALL 16668 0 2
22251: ST_TO_ADDR
// for i in ai_heal_these_humans [ base ] do
22252: LD_ADDR_VAR 0 2
22256: PUSH
22257: LD_EXP 33
22261: PUSH
22262: LD_VAR 0 6
22266: ARRAY
22267: PUSH
22268: FOR_IN
22269: IFFALSE 22382
// 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
22271: LD_VAR 0 13
22275: PUSH
22276: LD_VAR 0 2
22280: PUSH
22281: LD_EXP 17
22285: PUSH
22286: LD_VAR 0 6
22290: ARRAY
22291: IN
22292: AND
22293: NOT
22294: PUSH
22295: LD_VAR 0 2
22299: PPUSH
22300: LD_EXP 31
22304: PUSH
22305: LD_VAR 0 6
22309: ARRAY
22310: PUSH
22311: LD_INT 1
22313: ARRAY
22314: PPUSH
22315: LD_EXP 31
22319: PUSH
22320: LD_VAR 0 6
22324: ARRAY
22325: PUSH
22326: LD_INT 2
22328: ARRAY
22329: PPUSH
22330: CALL_OW 297
22334: PUSH
22335: LD_INT 4
22337: GREATER
22338: AND
22339: IFFALSE 22380
// ComMoveXY ( i , ai_human_pullback_hex [ base ] [ 1 ] , ai_human_pullback_hex [ base ] [ 2 ] ) ;
22341: LD_VAR 0 2
22345: PPUSH
22346: LD_EXP 31
22350: PUSH
22351: LD_VAR 0 6
22355: ARRAY
22356: PUSH
22357: LD_INT 1
22359: ARRAY
22360: PPUSH
22361: LD_EXP 31
22365: PUSH
22366: LD_VAR 0 6
22370: ARRAY
22371: PUSH
22372: LD_INT 2
22374: ARRAY
22375: PPUSH
22376: CALL_OW 111
22380: GO 22268
22382: POP
22383: POP
// if scientists_list = 0 then
22384: LD_VAR 0 3
22388: PUSH
22389: LD_INT 0
22391: EQUAL
22392: IFFALSE 22396
// continue ;
22394: GO 21947
// temp_list = ai_heal_these_humans [ base ] ;
22396: LD_ADDR_VAR 0 4
22400: PUSH
22401: LD_EXP 33
22405: PUSH
22406: LD_VAR 0 6
22410: ARRAY
22411: ST_TO_ADDR
// case side of russians :
22412: LD_VAR 0 1
22416: PUSH
22417: LD_EXP 3
22421: DOUBLE
22422: EQUAL
22423: IFTRUE 22427
22425: GO 22438
22427: POP
// area = ru_base_area ; end ;
22428: LD_ADDR_VAR 0 10
22432: PUSH
22433: LD_INT 1
22435: ST_TO_ADDR
22436: GO 22439
22438: POP
// i = 1 ;
22439: LD_ADDR_VAR 0 2
22443: PUSH
22444: LD_INT 1
22446: ST_TO_ADDR
// while i <= temp_list do
22447: LD_VAR 0 2
22451: PUSH
22452: LD_VAR 0 4
22456: LESSEQUAL
22457: IFFALSE 22541
// begin if not IsOk ( temp_list [ i ] ) and GetDistUnitArea ( temp_list [ i ] , area ) > 7 then
22459: LD_VAR 0 4
22463: PUSH
22464: LD_VAR 0 2
22468: ARRAY
22469: PPUSH
22470: CALL_OW 302
22474: NOT
22475: PUSH
22476: LD_VAR 0 4
22480: PUSH
22481: LD_VAR 0 2
22485: ARRAY
22486: PPUSH
22487: LD_VAR 0 10
22491: PPUSH
22492: CALL_OW 299
22496: PUSH
22497: LD_INT 7
22499: GREATER
22500: AND
22501: IFFALSE 22525
// begin temp_list = Delete ( temp_list , i ) ;
22503: LD_ADDR_VAR 0 4
22507: PUSH
22508: LD_VAR 0 4
22512: PPUSH
22513: LD_VAR 0 2
22517: PPUSH
22518: CALL_OW 3
22522: ST_TO_ADDR
// continue ;
22523: GO 22447
// end ; i = i + 1 ;
22525: LD_ADDR_VAR 0 2
22529: PUSH
22530: LD_VAR 0 2
22534: PUSH
22535: LD_INT 1
22537: PLUS
22538: ST_TO_ADDR
// end ;
22539: GO 22447
// if temp_list > 0 then
22541: LD_VAR 0 4
22545: PUSH
22546: LD_INT 0
22548: GREATER
22549: IFFALSE 22688
// begin scientists_list = GetHumansOutOfUnits ( scientists_list ) ;
22551: LD_ADDR_VAR 0 3
22555: PUSH
22556: LD_VAR 0 3
22560: PPUSH
22561: CALL 16563 0 1
22565: ST_TO_ADDR
// repeat i = 1 ;
22566: LD_ADDR_VAR 0 2
22570: PUSH
22571: LD_INT 1
22573: ST_TO_ADDR
// while i <= temp_list do
22574: LD_VAR 0 2
22578: PUSH
22579: LD_VAR 0 4
22583: LESSEQUAL
22584: IFFALSE 22676
// begin if scientists_list = 0 then
22586: LD_VAR 0 3
22590: PUSH
22591: LD_INT 0
22593: EQUAL
22594: IFFALSE 22598
// break ;
22596: GO 22676
// temp_unit = NearestUnitToUnit ( scientists_list , temp_list [ i ] ) ;
22598: LD_ADDR_VAR 0 5
22602: PUSH
22603: LD_VAR 0 3
22607: PPUSH
22608: LD_VAR 0 4
22612: PUSH
22613: LD_VAR 0 2
22617: ARRAY
22618: PPUSH
22619: CALL_OW 74
22623: ST_TO_ADDR
// ComHeal ( temp_unit , temp_list [ i ] ) ;
22624: LD_VAR 0 5
22628: PPUSH
22629: LD_VAR 0 4
22633: PUSH
22634: LD_VAR 0 2
22638: ARRAY
22639: PPUSH
22640: CALL_OW 128
// scientists_list = scientists_list diff temp_unit ;
22644: LD_ADDR_VAR 0 3
22648: PUSH
22649: LD_VAR 0 3
22653: PUSH
22654: LD_VAR 0 5
22658: DIFF
22659: ST_TO_ADDR
// i = i + 1 ;
22660: LD_ADDR_VAR 0 2
22664: PUSH
22665: LD_VAR 0 2
22669: PUSH
22670: LD_INT 1
22672: PLUS
22673: ST_TO_ADDR
// end ;
22674: GO 22574
// until scientists_list = 0 ;
22676: LD_VAR 0 3
22680: PUSH
22681: LD_INT 0
22683: EQUAL
22684: IFFALSE 22566
// continue ;
22686: GO 21947
// end ; DistributeHumansToBuildings ( base , scientists_list , UnitFilter ( ai_labs [ base ] , [ [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) , class_scientistic , 6 , true , false ) ;
22688: LD_VAR 0 6
22692: PPUSH
22693: LD_VAR 0 3
22697: PPUSH
22698: LD_EXP 24
22702: PUSH
22703: LD_VAR 0 6
22707: ARRAY
22708: PPUSH
22709: LD_INT 50
22711: PUSH
22712: EMPTY
22713: LIST
22714: PUSH
22715: LD_INT 3
22717: PUSH
22718: LD_INT 57
22720: PUSH
22721: EMPTY
22722: LIST
22723: PUSH
22724: EMPTY
22725: LIST
22726: LIST
22727: PUSH
22728: EMPTY
22729: LIST
22730: LIST
22731: PPUSH
22732: CALL_OW 72
22736: PPUSH
22737: LD_INT 4
22739: PPUSH
22740: LD_INT 6
22742: PPUSH
22743: LD_INT 1
22745: PPUSH
22746: LD_INT 0
22748: PPUSH
22749: CALL 11632 0 7
// end ;
22753: GO 21947
22755: POP
22756: POP
// until false ;
22757: LD_INT 0
22759: IFFALSE 21930
// end ; end_of_file
22761: PPOPN 13
22763: END
// export function AI_GetAwayFromXY ( unit1 , x , y , dist , add ) ; var list_nearest , list_coords , temp_dir , dir_list , b , min_dist , temp_dist , c , rand_num , rand_near_hex , attempts ; begin
22764: LD_INT 0
22766: PPUSH
22767: PPUSH
22768: PPUSH
22769: PPUSH
22770: PPUSH
22771: PPUSH
22772: PPUSH
22773: PPUSH
22774: PPUSH
22775: PPUSH
22776: PPUSH
22777: 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
22778: LD_VAR 0 1
22782: PPUSH
22783: CALL_OW 302
22787: NOT
22788: PUSH
22789: LD_VAR 0 4
22793: PUSH
22794: LD_INT 1
22796: EQUAL
22797: OR
22798: PUSH
22799: LD_VAR 0 2
22803: PPUSH
22804: LD_VAR 0 3
22808: PPUSH
22809: CALL_OW 488
22813: NOT
22814: OR
22815: PUSH
22816: LD_VAR 0 1
22820: PPUSH
22821: LD_VAR 0 2
22825: PPUSH
22826: LD_VAR 0 3
22830: PPUSH
22831: CALL_OW 297
22835: PUSH
22836: LD_VAR 0 4
22840: GREATEREQUAL
22841: OR
22842: PUSH
22843: LD_VAR 0 5
22847: PUSH
22848: LD_INT 1
22850: PUSH
22851: LD_INT 0
22853: PUSH
22854: EMPTY
22855: LIST
22856: LIST
22857: IN
22858: NOT
22859: OR
22860: IFFALSE 22864
// exit ;
22862: GO 24421
// attempts = 0 ;
22864: LD_ADDR_VAR 0 17
22868: PUSH
22869: LD_INT 0
22871: ST_TO_ADDR
// repeat list_nearest = [ ] ;
22872: LD_ADDR_VAR 0 7
22876: PUSH
22877: EMPTY
22878: ST_TO_ADDR
// list_coords = [ ] ;
22879: LD_ADDR_VAR 0 8
22883: PUSH
22884: EMPTY
22885: ST_TO_ADDR
// temp_dir = AI_GetTurnDirection ( x , y , GetX ( unit1 ) , GetY ( unit1 ) ) ;
22886: LD_ADDR_VAR 0 9
22890: PUSH
22891: LD_VAR 0 2
22895: PPUSH
22896: LD_VAR 0 3
22900: PPUSH
22901: LD_VAR 0 1
22905: PPUSH
22906: CALL_OW 250
22910: PPUSH
22911: LD_VAR 0 1
22915: PPUSH
22916: CALL_OW 251
22920: PPUSH
22921: CALL 24426 0 4
22925: ST_TO_ADDR
// if attempts = 0 then
22926: LD_VAR 0 17
22930: PUSH
22931: LD_INT 0
22933: EQUAL
22934: IFFALSE 23042
// begin dir_list = [ temp_dir , temp_dir + 1 , temp_dir - 1 ] ;
22936: LD_ADDR_VAR 0 10
22940: PUSH
22941: LD_VAR 0 9
22945: PUSH
22946: LD_VAR 0 9
22950: PUSH
22951: LD_INT 1
22953: PLUS
22954: PUSH
22955: LD_VAR 0 9
22959: PUSH
22960: LD_INT 1
22962: MINUS
22963: PUSH
22964: EMPTY
22965: LIST
22966: LIST
22967: LIST
22968: ST_TO_ADDR
// if dir_list [ 2 ] = 6 then
22969: LD_VAR 0 10
22973: PUSH
22974: LD_INT 2
22976: ARRAY
22977: PUSH
22978: LD_INT 6
22980: EQUAL
22981: IFFALSE 23004
// dir_list = Replace ( dir_list , 2 , 0 ) ;
22983: LD_ADDR_VAR 0 10
22987: PUSH
22988: LD_VAR 0 10
22992: PPUSH
22993: LD_INT 2
22995: PPUSH
22996: LD_INT 0
22998: PPUSH
22999: CALL_OW 1
23003: ST_TO_ADDR
// if dir_list [ 3 ] = - 1 then
23004: LD_VAR 0 10
23008: PUSH
23009: LD_INT 3
23011: ARRAY
23012: PUSH
23013: LD_INT 1
23015: NEG
23016: EQUAL
23017: IFFALSE 23040
// dir_list = Replace ( dir_list , 3 , 5 ) ;
23019: LD_ADDR_VAR 0 10
23023: PUSH
23024: LD_VAR 0 10
23028: PPUSH
23029: LD_INT 3
23031: PPUSH
23032: LD_INT 5
23034: PPUSH
23035: CALL_OW 1
23039: ST_TO_ADDR
// end else
23040: GO 23079
// dir_list = [ 0 , 1 , 2 , 3 , 4 , 5 ] diff temp_dir ;
23042: LD_ADDR_VAR 0 10
23046: PUSH
23047: LD_INT 0
23049: PUSH
23050: LD_INT 1
23052: PUSH
23053: LD_INT 2
23055: PUSH
23056: LD_INT 3
23058: PUSH
23059: LD_INT 4
23061: PUSH
23062: LD_INT 5
23064: PUSH
23065: EMPTY
23066: LIST
23067: LIST
23068: LIST
23069: LIST
23070: LIST
23071: LIST
23072: PUSH
23073: LD_VAR 0 9
23077: DIFF
23078: ST_TO_ADDR
// for c = 1 to ( dir_list + 0 ) do
23079: LD_ADDR_VAR 0 14
23083: PUSH
23084: DOUBLE
23085: LD_INT 1
23087: DEC
23088: ST_TO_ADDR
23089: LD_VAR 0 10
23093: PUSH
23094: LD_INT 0
23096: PLUS
23097: PUSH
23098: FOR_TO
23099: IFFALSE 23421
// case dir_list [ c ] of 0 :
23101: LD_VAR 0 10
23105: PUSH
23106: LD_VAR 0 14
23110: ARRAY
23111: PUSH
23112: LD_INT 0
23114: DOUBLE
23115: EQUAL
23116: IFTRUE 23120
23118: GO 23161
23120: POP
// list_coords = Insert ( list_coords , 1 , [ x , y - dist ] ) ; 1 :
23121: LD_ADDR_VAR 0 8
23125: PUSH
23126: LD_VAR 0 8
23130: PPUSH
23131: LD_INT 1
23133: PPUSH
23134: LD_VAR 0 2
23138: PUSH
23139: LD_VAR 0 3
23143: PUSH
23144: LD_VAR 0 4
23148: MINUS
23149: PUSH
23150: EMPTY
23151: LIST
23152: LIST
23153: PPUSH
23154: CALL_OW 2
23158: ST_TO_ADDR
23159: GO 23419
23161: LD_INT 1
23163: DOUBLE
23164: EQUAL
23165: IFTRUE 23169
23167: GO 23210
23169: POP
// list_coords = Insert ( list_coords , 1 , [ x + dist , y ] ) ; 2 :
23170: LD_ADDR_VAR 0 8
23174: PUSH
23175: LD_VAR 0 8
23179: PPUSH
23180: LD_INT 1
23182: PPUSH
23183: LD_VAR 0 2
23187: PUSH
23188: LD_VAR 0 4
23192: PLUS
23193: PUSH
23194: LD_VAR 0 3
23198: PUSH
23199: EMPTY
23200: LIST
23201: LIST
23202: PPUSH
23203: CALL_OW 2
23207: ST_TO_ADDR
23208: GO 23419
23210: LD_INT 2
23212: DOUBLE
23213: EQUAL
23214: IFTRUE 23218
23216: GO 23265
23218: POP
// list_coords = Insert ( list_coords , 1 , [ x + dist , y + dist ] ) ; 3 :
23219: LD_ADDR_VAR 0 8
23223: PUSH
23224: LD_VAR 0 8
23228: PPUSH
23229: LD_INT 1
23231: PPUSH
23232: LD_VAR 0 2
23236: PUSH
23237: LD_VAR 0 4
23241: PLUS
23242: PUSH
23243: LD_VAR 0 3
23247: PUSH
23248: LD_VAR 0 4
23252: PLUS
23253: PUSH
23254: EMPTY
23255: LIST
23256: LIST
23257: PPUSH
23258: CALL_OW 2
23262: ST_TO_ADDR
23263: GO 23419
23265: LD_INT 3
23267: DOUBLE
23268: EQUAL
23269: IFTRUE 23273
23271: GO 23314
23273: POP
// list_coords = Insert ( list_coords , 1 , [ x , y + dist ] ) ; 4 :
23274: LD_ADDR_VAR 0 8
23278: PUSH
23279: LD_VAR 0 8
23283: PPUSH
23284: LD_INT 1
23286: PPUSH
23287: LD_VAR 0 2
23291: PUSH
23292: LD_VAR 0 3
23296: PUSH
23297: LD_VAR 0 4
23301: PLUS
23302: PUSH
23303: EMPTY
23304: LIST
23305: LIST
23306: PPUSH
23307: CALL_OW 2
23311: ST_TO_ADDR
23312: GO 23419
23314: LD_INT 4
23316: DOUBLE
23317: EQUAL
23318: IFTRUE 23322
23320: GO 23363
23322: POP
// list_coords = Insert ( list_coords , 1 , [ x - dist , y ] ) ; 5 :
23323: LD_ADDR_VAR 0 8
23327: PUSH
23328: LD_VAR 0 8
23332: PPUSH
23333: LD_INT 1
23335: PPUSH
23336: LD_VAR 0 2
23340: PUSH
23341: LD_VAR 0 4
23345: MINUS
23346: PUSH
23347: LD_VAR 0 3
23351: PUSH
23352: EMPTY
23353: LIST
23354: LIST
23355: PPUSH
23356: CALL_OW 2
23360: ST_TO_ADDR
23361: GO 23419
23363: LD_INT 5
23365: DOUBLE
23366: EQUAL
23367: IFTRUE 23371
23369: GO 23418
23371: POP
// list_coords = Insert ( list_coords , 1 , [ x - dist , y - dist ] ) ; end ;
23372: LD_ADDR_VAR 0 8
23376: PUSH
23377: LD_VAR 0 8
23381: PPUSH
23382: LD_INT 1
23384: PPUSH
23385: LD_VAR 0 2
23389: PUSH
23390: LD_VAR 0 4
23394: MINUS
23395: PUSH
23396: LD_VAR 0 3
23400: PUSH
23401: LD_VAR 0 4
23405: MINUS
23406: PUSH
23407: EMPTY
23408: LIST
23409: LIST
23410: PPUSH
23411: CALL_OW 2
23415: ST_TO_ADDR
23416: GO 23419
23418: POP
23419: GO 23098
23421: POP
23422: POP
// if dist < 30 then
23423: LD_VAR 0 4
23427: PUSH
23428: LD_INT 30
23430: LESS
23431: IFFALSE 23443
// c = 1 else
23433: LD_ADDR_VAR 0 14
23437: PUSH
23438: LD_INT 1
23440: ST_TO_ADDR
23441: GO 23451
// c = 2 ;
23443: LD_ADDR_VAR 0 14
23447: PUSH
23448: LD_INT 2
23450: ST_TO_ADDR
// b = 1 ;
23451: LD_ADDR_VAR 0 11
23455: PUSH
23456: LD_INT 1
23458: ST_TO_ADDR
// while b <= ( dist - 1 ) do
23459: LD_VAR 0 11
23463: PUSH
23464: LD_VAR 0 4
23468: PUSH
23469: LD_INT 1
23471: MINUS
23472: LESSEQUAL
23473: IFFALSE 23901
// begin if 0 in dir_list and 1 in dir_list then
23475: LD_INT 0
23477: PUSH
23478: LD_VAR 0 10
23482: IN
23483: PUSH
23484: LD_INT 1
23486: PUSH
23487: LD_VAR 0 10
23491: IN
23492: AND
23493: IFFALSE 23545
// list_coords = Insert ( list_coords , 1 , [ x + b , y - dist + b ] ) ;
23495: LD_ADDR_VAR 0 8
23499: PUSH
23500: LD_VAR 0 8
23504: PPUSH
23505: LD_INT 1
23507: PPUSH
23508: LD_VAR 0 2
23512: PUSH
23513: LD_VAR 0 11
23517: PLUS
23518: PUSH
23519: LD_VAR 0 3
23523: PUSH
23524: LD_VAR 0 4
23528: MINUS
23529: PUSH
23530: LD_VAR 0 11
23534: PLUS
23535: PUSH
23536: EMPTY
23537: LIST
23538: LIST
23539: PPUSH
23540: CALL_OW 2
23544: ST_TO_ADDR
// if 1 in dir_list and 2 in dir_list then
23545: LD_INT 1
23547: PUSH
23548: LD_VAR 0 10
23552: IN
23553: PUSH
23554: LD_INT 2
23556: PUSH
23557: LD_VAR 0 10
23561: IN
23562: AND
23563: IFFALSE 23609
// list_coords = Insert ( list_coords , 1 , [ x + dist , y + b ] ) ;
23565: LD_ADDR_VAR 0 8
23569: PUSH
23570: LD_VAR 0 8
23574: PPUSH
23575: LD_INT 1
23577: PPUSH
23578: LD_VAR 0 2
23582: PUSH
23583: LD_VAR 0 4
23587: PLUS
23588: PUSH
23589: LD_VAR 0 3
23593: PUSH
23594: LD_VAR 0 11
23598: PLUS
23599: PUSH
23600: EMPTY
23601: LIST
23602: LIST
23603: PPUSH
23604: CALL_OW 2
23608: ST_TO_ADDR
// if 2 in dir_list and 3 in dir_list then
23609: LD_INT 2
23611: PUSH
23612: LD_VAR 0 10
23616: IN
23617: PUSH
23618: LD_INT 3
23620: PUSH
23621: LD_VAR 0 10
23625: IN
23626: AND
23627: IFFALSE 23679
// list_coords = Insert ( list_coords , 1 , [ x + dist - b , y + dist ] ) ;
23629: LD_ADDR_VAR 0 8
23633: PUSH
23634: LD_VAR 0 8
23638: PPUSH
23639: LD_INT 1
23641: PPUSH
23642: LD_VAR 0 2
23646: PUSH
23647: LD_VAR 0 4
23651: PLUS
23652: PUSH
23653: LD_VAR 0 11
23657: MINUS
23658: PUSH
23659: LD_VAR 0 3
23663: PUSH
23664: LD_VAR 0 4
23668: PLUS
23669: PUSH
23670: EMPTY
23671: LIST
23672: LIST
23673: PPUSH
23674: CALL_OW 2
23678: ST_TO_ADDR
// if 3 in dir_list and 4 in dir_list then
23679: LD_INT 3
23681: PUSH
23682: LD_VAR 0 10
23686: IN
23687: PUSH
23688: LD_INT 4
23690: PUSH
23691: LD_VAR 0 10
23695: IN
23696: AND
23697: IFFALSE 23749
// list_coords = Insert ( list_coords , 1 , [ x - b , y + dist - b ] ) ;
23699: LD_ADDR_VAR 0 8
23703: PUSH
23704: LD_VAR 0 8
23708: PPUSH
23709: LD_INT 1
23711: PPUSH
23712: LD_VAR 0 2
23716: PUSH
23717: LD_VAR 0 11
23721: MINUS
23722: PUSH
23723: LD_VAR 0 3
23727: PUSH
23728: LD_VAR 0 4
23732: PLUS
23733: PUSH
23734: LD_VAR 0 11
23738: MINUS
23739: PUSH
23740: EMPTY
23741: LIST
23742: LIST
23743: PPUSH
23744: CALL_OW 2
23748: ST_TO_ADDR
// if 4 in dir_list and 5 in dir_list then
23749: LD_INT 4
23751: PUSH
23752: LD_VAR 0 10
23756: IN
23757: PUSH
23758: LD_INT 5
23760: PUSH
23761: LD_VAR 0 10
23765: IN
23766: AND
23767: IFFALSE 23813
// list_coords = Insert ( list_coords , 1 , [ x - dist , y - b ] ) ;
23769: LD_ADDR_VAR 0 8
23773: PUSH
23774: LD_VAR 0 8
23778: PPUSH
23779: LD_INT 1
23781: PPUSH
23782: LD_VAR 0 2
23786: PUSH
23787: LD_VAR 0 4
23791: MINUS
23792: PUSH
23793: LD_VAR 0 3
23797: PUSH
23798: LD_VAR 0 11
23802: MINUS
23803: PUSH
23804: EMPTY
23805: LIST
23806: LIST
23807: PPUSH
23808: CALL_OW 2
23812: ST_TO_ADDR
// if 5 in dir_list and 0 in dir_list then
23813: LD_INT 5
23815: PUSH
23816: LD_VAR 0 10
23820: IN
23821: PUSH
23822: LD_INT 0
23824: PUSH
23825: LD_VAR 0 10
23829: IN
23830: AND
23831: IFFALSE 23883
// list_coords = Insert ( list_coords , 1 , [ x - dist + b , y - dist ] ) ;
23833: LD_ADDR_VAR 0 8
23837: PUSH
23838: LD_VAR 0 8
23842: PPUSH
23843: LD_INT 1
23845: PPUSH
23846: LD_VAR 0 2
23850: PUSH
23851: LD_VAR 0 4
23855: MINUS
23856: PUSH
23857: LD_VAR 0 11
23861: PLUS
23862: PUSH
23863: LD_VAR 0 3
23867: PUSH
23868: LD_VAR 0 4
23872: MINUS
23873: PUSH
23874: EMPTY
23875: LIST
23876: LIST
23877: PPUSH
23878: CALL_OW 2
23882: ST_TO_ADDR
// b = b + c end ;
23883: LD_ADDR_VAR 0 11
23887: PUSH
23888: LD_VAR 0 11
23892: PUSH
23893: LD_VAR 0 14
23897: PLUS
23898: ST_TO_ADDR
23899: GO 23459
// if list_coords = 0 then
23901: LD_VAR 0 8
23905: PUSH
23906: LD_INT 0
23908: EQUAL
23909: IFFALSE 23913
// exit ;
23911: GO 24421
// repeat min_dist = 5000 ;
23913: LD_ADDR_VAR 0 12
23917: PUSH
23918: LD_INT 5000
23920: ST_TO_ADDR
// for b in list_coords do
23921: LD_ADDR_VAR 0 11
23925: PUSH
23926: LD_VAR 0 8
23930: PUSH
23931: FOR_IN
23932: IFFALSE 23991
// begin temp_dist = GetDistUnitXY ( unit1 , b [ 1 ] , b [ 2 ] ) ;
23934: LD_ADDR_VAR 0 13
23938: PUSH
23939: LD_VAR 0 1
23943: PPUSH
23944: LD_VAR 0 11
23948: PUSH
23949: LD_INT 1
23951: ARRAY
23952: PPUSH
23953: LD_VAR 0 11
23957: PUSH
23958: LD_INT 2
23960: ARRAY
23961: PPUSH
23962: CALL_OW 297
23966: ST_TO_ADDR
// if temp_dist < min_dist then
23967: LD_VAR 0 13
23971: PUSH
23972: LD_VAR 0 12
23976: LESS
23977: IFFALSE 23989
// min_dist = temp_dist ;
23979: LD_ADDR_VAR 0 12
23983: PUSH
23984: LD_VAR 0 13
23988: ST_TO_ADDR
// end ;
23989: GO 23931
23991: POP
23992: POP
// c = 0 ;
23993: LD_ADDR_VAR 0 14
23997: PUSH
23998: LD_INT 0
24000: ST_TO_ADDR
// repeat c = c + 1 ;
24001: LD_ADDR_VAR 0 14
24005: PUSH
24006: LD_VAR 0 14
24010: PUSH
24011: LD_INT 1
24013: PLUS
24014: ST_TO_ADDR
// if GetDistUnitXY ( unit1 , list_coords [ c ] [ 1 ] , list_coords [ c ] [ 2 ] ) = min_dist then
24015: LD_VAR 0 1
24019: PPUSH
24020: LD_VAR 0 8
24024: PUSH
24025: LD_VAR 0 14
24029: ARRAY
24030: PUSH
24031: LD_INT 1
24033: ARRAY
24034: PPUSH
24035: LD_VAR 0 8
24039: PUSH
24040: LD_VAR 0 14
24044: ARRAY
24045: PUSH
24046: LD_INT 2
24048: ARRAY
24049: PPUSH
24050: CALL_OW 297
24054: PUSH
24055: LD_VAR 0 12
24059: EQUAL
24060: IFFALSE 24125
// begin list_nearest = Insert ( list_nearest , 1 , list_coords [ c ] ) ;
24062: LD_ADDR_VAR 0 7
24066: PUSH
24067: LD_VAR 0 7
24071: PPUSH
24072: LD_INT 1
24074: PPUSH
24075: LD_VAR 0 8
24079: PUSH
24080: LD_VAR 0 14
24084: ARRAY
24085: PPUSH
24086: CALL_OW 2
24090: ST_TO_ADDR
// list_coords = Delete ( list_coords , c ) ;
24091: LD_ADDR_VAR 0 8
24095: PUSH
24096: LD_VAR 0 8
24100: PPUSH
24101: LD_VAR 0 14
24105: PPUSH
24106: CALL_OW 3
24110: ST_TO_ADDR
// c = c - 1 ;
24111: LD_ADDR_VAR 0 14
24115: PUSH
24116: LD_VAR 0 14
24120: PUSH
24121: LD_INT 1
24123: MINUS
24124: ST_TO_ADDR
// end ; until c = list_coords ;
24125: LD_VAR 0 14
24129: PUSH
24130: LD_VAR 0 8
24134: EQUAL
24135: IFFALSE 24001
// c = 0 ;
24137: LD_ADDR_VAR 0 14
24141: PUSH
24142: LD_INT 0
24144: ST_TO_ADDR
// if list_nearest > 0 then
24145: LD_VAR 0 7
24149: PUSH
24150: LD_INT 0
24152: GREATER
24153: IFFALSE 24295
// begin repeat rand_num = Rand ( 1 , list_nearest ) ;
24155: LD_ADDR_VAR 0 15
24159: PUSH
24160: LD_INT 1
24162: PPUSH
24163: LD_VAR 0 7
24167: PPUSH
24168: CALL_OW 12
24172: ST_TO_ADDR
// rand_near_hex = list_nearest [ rand_num ] ;
24173: LD_ADDR_VAR 0 16
24177: PUSH
24178: LD_VAR 0 7
24182: PUSH
24183: LD_VAR 0 15
24187: ARRAY
24188: 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
24189: LD_VAR 0 16
24193: PUSH
24194: LD_INT 1
24196: ARRAY
24197: PPUSH
24198: LD_VAR 0 16
24202: PUSH
24203: LD_INT 2
24205: ARRAY
24206: PPUSH
24207: CALL_OW 488
24211: PUSH
24212: LD_INT 0
24214: GREATER
24215: PUSH
24216: LD_VAR 0 16
24220: PUSH
24221: LD_INT 1
24223: ARRAY
24224: PPUSH
24225: LD_VAR 0 16
24229: PUSH
24230: LD_INT 2
24232: ARRAY
24233: PPUSH
24234: CALL_OW 428
24238: PUSH
24239: LD_INT 0
24241: EQUAL
24242: AND
24243: IFFALSE 24255
// c = 1 else
24245: LD_ADDR_VAR 0 14
24249: PUSH
24250: LD_INT 1
24252: ST_TO_ADDR
24253: GO 24275
// list_nearest = Delete ( list_nearest , rand_num ) ;
24255: LD_ADDR_VAR 0 7
24259: PUSH
24260: LD_VAR 0 7
24264: PPUSH
24265: LD_VAR 0 15
24269: PPUSH
24270: CALL_OW 3
24274: ST_TO_ADDR
// until c = 1 or list_nearest = 0 ;
24275: LD_VAR 0 14
24279: PUSH
24280: LD_INT 1
24282: EQUAL
24283: PUSH
24284: LD_VAR 0 7
24288: PUSH
24289: LD_INT 0
24291: EQUAL
24292: OR
24293: IFFALSE 24155
// end ; until c = 1 or list_coords = 0 ;
24295: LD_VAR 0 14
24299: PUSH
24300: LD_INT 1
24302: EQUAL
24303: PUSH
24304: LD_VAR 0 8
24308: PUSH
24309: LD_INT 0
24311: EQUAL
24312: OR
24313: IFFALSE 23913
// attempts = attempts + 1 ;
24315: LD_ADDR_VAR 0 17
24319: PUSH
24320: LD_VAR 0 17
24324: PUSH
24325: LD_INT 1
24327: PLUS
24328: ST_TO_ADDR
// until c = 1 or attempts > 1 ;
24329: LD_VAR 0 14
24333: PUSH
24334: LD_INT 1
24336: EQUAL
24337: PUSH
24338: LD_VAR 0 17
24342: PUSH
24343: LD_INT 1
24345: GREATER
24346: OR
24347: IFFALSE 22872
// if c = 1 then
24349: LD_VAR 0 14
24353: PUSH
24354: LD_INT 1
24356: EQUAL
24357: IFFALSE 24421
// if add then
24359: LD_VAR 0 5
24363: IFFALSE 24394
// AddComMoveXY ( unit1 , rand_near_hex [ 1 ] , rand_near_hex [ 2 ] ) else
24365: LD_VAR 0 1
24369: PPUSH
24370: LD_VAR 0 16
24374: PUSH
24375: LD_INT 1
24377: ARRAY
24378: PPUSH
24379: LD_VAR 0 16
24383: PUSH
24384: LD_INT 2
24386: ARRAY
24387: PPUSH
24388: CALL_OW 171
24392: GO 24421
// ComMoveXY ( unit1 , rand_near_hex [ 1 ] , rand_near_hex [ 2 ] ) ;
24394: LD_VAR 0 1
24398: PPUSH
24399: LD_VAR 0 16
24403: PUSH
24404: LD_INT 1
24406: ARRAY
24407: PPUSH
24408: LD_VAR 0 16
24412: PUSH
24413: LD_INT 2
24415: ARRAY
24416: PPUSH
24417: CALL_OW 111
// end ;
24421: LD_VAR 0 6
24425: RET
// export function AI_GetTurnDirection ( x1 , y1 , x , y ) ; var dist_1 , dist_2 , b , temp_dist , dir ; begin
24426: LD_INT 0
24428: PPUSH
24429: PPUSH
24430: PPUSH
24431: PPUSH
24432: PPUSH
24433: PPUSH
// if not ValidHex ( x1 , y1 ) or not ValidHex ( x , y ) then
24434: LD_VAR 0 1
24438: PPUSH
24439: LD_VAR 0 2
24443: PPUSH
24444: CALL_OW 488
24448: NOT
24449: PUSH
24450: LD_VAR 0 3
24454: PPUSH
24455: LD_VAR 0 4
24459: PPUSH
24460: CALL_OW 488
24464: NOT
24465: OR
24466: IFFALSE 24479
// begin result = - 1 ;
24468: LD_ADDR_VAR 0 5
24472: PUSH
24473: LD_INT 1
24475: NEG
24476: ST_TO_ADDR
// exit ;
24477: GO 24639
// end ; dist_1 = GetDistXY ( x1 , y1 , x , y ) ;
24479: LD_ADDR_VAR 0 6
24483: PUSH
24484: LD_VAR 0 1
24488: PPUSH
24489: LD_VAR 0 2
24493: PPUSH
24494: LD_VAR 0 3
24498: PPUSH
24499: LD_VAR 0 4
24503: PPUSH
24504: CALL_OW 298
24508: ST_TO_ADDR
// dist_2 = 99999 ;
24509: LD_ADDR_VAR 0 7
24513: PUSH
24514: LD_INT 99999
24516: ST_TO_ADDR
// for b = 0 to 5 do
24517: LD_ADDR_VAR 0 8
24521: PUSH
24522: DOUBLE
24523: LD_INT 0
24525: DEC
24526: ST_TO_ADDR
24527: LD_INT 5
24529: PUSH
24530: FOR_TO
24531: IFFALSE 24627
// begin temp_dist = GetDistXY ( ShiftX ( x1 , b , dist_1 ) , ShiftY ( y1 , b , dist_1 ) , x , y ) ;
24533: LD_ADDR_VAR 0 9
24537: PUSH
24538: LD_VAR 0 1
24542: PPUSH
24543: LD_VAR 0 8
24547: PPUSH
24548: LD_VAR 0 6
24552: PPUSH
24553: CALL_OW 272
24557: PPUSH
24558: LD_VAR 0 2
24562: PPUSH
24563: LD_VAR 0 8
24567: PPUSH
24568: LD_VAR 0 6
24572: PPUSH
24573: CALL_OW 273
24577: PPUSH
24578: LD_VAR 0 3
24582: PPUSH
24583: LD_VAR 0 4
24587: PPUSH
24588: CALL_OW 298
24592: ST_TO_ADDR
// if temp_dist < dist_2 then
24593: LD_VAR 0 9
24597: PUSH
24598: LD_VAR 0 7
24602: LESS
24603: IFFALSE 24625
// begin dist_2 = temp_dist ;
24605: LD_ADDR_VAR 0 7
24609: PUSH
24610: LD_VAR 0 9
24614: ST_TO_ADDR
// dir = b ;
24615: LD_ADDR_VAR 0 10
24619: PUSH
24620: LD_VAR 0 8
24624: ST_TO_ADDR
// end ; end ;
24625: GO 24530
24627: POP
24628: POP
// result = dir ;
24629: LD_ADDR_VAR 0 5
24633: PUSH
24634: LD_VAR 0 10
24638: ST_TO_ADDR
// end ;
24639: LD_VAR 0 5
24643: RET
// export function AI_InvertDirection ( direction ) ; var dir ; begin
24644: LD_INT 0
24646: PPUSH
24647: PPUSH
// dir = direction - 3 ;
24648: LD_ADDR_VAR 0 3
24652: PUSH
24653: LD_VAR 0 1
24657: PUSH
24658: LD_INT 3
24660: MINUS
24661: ST_TO_ADDR
// if dir < 0 then
24662: LD_VAR 0 3
24666: PUSH
24667: LD_INT 0
24669: LESS
24670: IFFALSE 24686
// dir = dir + 6 ;
24672: LD_ADDR_VAR 0 3
24676: PUSH
24677: LD_VAR 0 3
24681: PUSH
24682: LD_INT 6
24684: PLUS
24685: ST_TO_ADDR
// result = dir ;
24686: LD_ADDR_VAR 0 2
24690: PUSH
24691: LD_VAR 0 3
24695: ST_TO_ADDR
// end ; end_of_file
24696: LD_VAR 0 2
24700: RET
// on UnitGoesToRed ( un ) do begin if GetSide ( un ) = russians then
24701: LD_VAR 0 1
24705: PPUSH
24706: CALL_OW 255
24710: PUSH
24711: LD_EXP 3
24715: EQUAL
24716: IFFALSE 24746
// begin if un = ai_depot [ 1 ] then
24718: LD_VAR 0 1
24722: PUSH
24723: LD_EXP 23
24727: PUSH
24728: LD_INT 1
24730: ARRAY
24731: EQUAL
24732: IFFALSE 24746
// begin ResetRussianDepot ;
24734: CALL 24749 0 0
// check_escape = true ;
24738: LD_ADDR_EXP 93
24742: PUSH
24743: LD_INT 1
24745: ST_TO_ADDR
// end ; end ; end ;
24746: PPOPN 1
24748: END
// function ResetRussianDepot ; var base ; begin
24749: LD_INT 0
24751: PPUSH
24752: PPUSH
// base = GetBase ( ai_depot [ 1 ] ) ;
24753: LD_ADDR_VAR 0 2
24757: PUSH
24758: LD_EXP 23
24762: PUSH
24763: LD_INT 1
24765: ARRAY
24766: PPUSH
24767: CALL_OW 274
24771: ST_TO_ADDR
// SetResourceType ( base , mat_cans , [ 130 , 80 , 20 ] [ difficulty ] + Rand ( 0 , 2 ) * 10 ) ;
24772: LD_VAR 0 2
24776: PPUSH
24777: LD_INT 1
24779: PPUSH
24780: LD_INT 130
24782: PUSH
24783: LD_INT 80
24785: PUSH
24786: LD_INT 20
24788: PUSH
24789: EMPTY
24790: LIST
24791: LIST
24792: LIST
24793: PUSH
24794: LD_OWVAR 67
24798: ARRAY
24799: PUSH
24800: LD_INT 0
24802: PPUSH
24803: LD_INT 2
24805: PPUSH
24806: CALL_OW 12
24810: PUSH
24811: LD_INT 10
24813: MUL
24814: PLUS
24815: PPUSH
24816: CALL_OW 277
// SetResourceType ( base , mat_oil , Rand ( 400 , 750 ) ) ;
24820: LD_VAR 0 2
24824: PPUSH
24825: LD_INT 2
24827: PPUSH
24828: LD_INT 400
24830: PPUSH
24831: LD_INT 750
24833: PPUSH
24834: CALL_OW 12
24838: PPUSH
24839: CALL_OW 277
// SetResourceType ( base , mat_siberit , 0 ) ;
24843: LD_VAR 0 2
24847: PPUSH
24848: LD_INT 3
24850: PPUSH
24851: LD_INT 0
24853: PPUSH
24854: CALL_OW 277
// end ;
24858: LD_VAR 0 1
24862: RET
// every 0 0$1 + 0 0$0.2 do var x , y , temp_list ;
24863: GO 24865
24865: DISABLE
24866: LD_INT 0
24868: PPUSH
24869: PPUSH
24870: PPUSH
// begin x = GetX ( scout ) ;
24871: LD_ADDR_VAR 0 1
24875: PUSH
24876: LD_EXP 14
24880: PPUSH
24881: CALL_OW 250
24885: ST_TO_ADDR
// y = GetY ( scout ) ;
24886: LD_ADDR_VAR 0 2
24890: PUSH
24891: LD_EXP 14
24895: PPUSH
24896: CALL_OW 251
24900: ST_TO_ADDR
// repeat wait ( 0 0$0.5 ) ;
24901: LD_INT 18
24903: PPUSH
24904: CALL_OW 67
// if traitors_answer > 0 or scout_pullback or traitors_pullback then
24908: LD_EXP 70
24912: PUSH
24913: LD_INT 0
24915: GREATER
24916: PUSH
24917: LD_EXP 71
24921: OR
24922: PUSH
24923: LD_EXP 72
24927: OR
24928: IFFALSE 24932
// exit ;
24930: GO 25223
// temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_see , you_alt ] , [ f_distxy , x , y , 22 ] ] ) ;
24932: LD_ADDR_VAR 0 3
24936: PUSH
24937: LD_INT 22
24939: PUSH
24940: LD_EXP 2
24944: PUSH
24945: EMPTY
24946: LIST
24947: LIST
24948: PUSH
24949: LD_INT 101
24951: PUSH
24952: LD_EXP 5
24956: PUSH
24957: EMPTY
24958: LIST
24959: LIST
24960: PUSH
24961: LD_INT 92
24963: PUSH
24964: LD_VAR 0 1
24968: PUSH
24969: LD_VAR 0 2
24973: PUSH
24974: LD_INT 22
24976: PUSH
24977: EMPTY
24978: LIST
24979: LIST
24980: LIST
24981: LIST
24982: PUSH
24983: EMPTY
24984: LIST
24985: LIST
24986: LIST
24987: PPUSH
24988: CALL_OW 69
24992: ST_TO_ADDR
// if temp_list > 0 then
24993: LD_VAR 0 3
24997: PUSH
24998: LD_INT 0
25000: GREATER
25001: IFFALSE 25219
// begin PlaceSeeing ( x , y , you , - 3 ) ;
25003: LD_VAR 0 1
25007: PPUSH
25008: LD_VAR 0 2
25012: PPUSH
25013: LD_EXP 2
25017: PPUSH
25018: LD_INT 3
25020: NEG
25021: PPUSH
25022: CALL_OW 330
// CenterOnXY ( x , y ) ;
25026: LD_VAR 0 1
25030: PPUSH
25031: LD_VAR 0 2
25035: PPUSH
25036: CALL_OW 84
// ComTurnUnit ( scout , temp_list [ 1 ] ) ;
25040: LD_EXP 14
25044: PPUSH
25045: LD_VAR 0 3
25049: PUSH
25050: LD_INT 1
25052: ARRAY
25053: PPUSH
25054: CALL_OW 119
// wait ( 5 ) ;
25058: LD_INT 5
25060: PPUSH
25061: CALL_OW 67
// DialogueOn ;
25065: CALL_OW 6
// Say ( scout , D2-ScoutM-1 ) ;
25069: LD_EXP 14
25073: PPUSH
25074: LD_STRING D2-ScoutM-1
25076: PPUSH
25077: CALL_OW 88
// Say ( Heike , D2-H-1 ) ;
25081: LD_EXP 7
25085: PPUSH
25086: LD_STRING D2-H-1
25088: PPUSH
25089: CALL_OW 88
// Say ( scout , D2-ScoutM-2 ) ;
25093: LD_EXP 14
25097: PPUSH
25098: LD_STRING D2-ScoutM-2
25100: PPUSH
25101: CALL_OW 88
// Say ( Heike , D2-H-2 ) ;
25105: LD_EXP 7
25109: PPUSH
25110: LD_STRING D2-H-2
25112: PPUSH
25113: CALL_OW 88
// Say ( scout , D2-ScoutM-3 ) ;
25117: LD_EXP 14
25121: PPUSH
25122: LD_STRING D2-ScoutM-3
25124: PPUSH
25125: CALL_OW 88
// Say ( Heike , D2-H-3 ) ;
25129: LD_EXP 7
25133: PPUSH
25134: LD_STRING D2-H-3
25136: PPUSH
25137: CALL_OW 88
// Say ( scout , D2-ScoutM-4 ) ;
25141: LD_EXP 14
25145: PPUSH
25146: LD_STRING D2-ScoutM-4
25148: PPUSH
25149: CALL_OW 88
// DialogueOff ;
25153: CALL_OW 7
// RemoveSeeing ( x , y , you ) ;
25157: LD_VAR 0 1
25161: PPUSH
25162: LD_VAR 0 2
25166: PPUSH
25167: LD_EXP 2
25171: PPUSH
25172: CALL_OW 331
// ComTurnXY ( scout , ShiftX ( x , 4 , 1 ) , ShiftY ( y , 4 , 1 ) ) ;
25176: LD_EXP 14
25180: PPUSH
25181: LD_VAR 0 1
25185: PPUSH
25186: LD_INT 4
25188: PPUSH
25189: LD_INT 1
25191: PPUSH
25192: CALL_OW 272
25196: PPUSH
25197: LD_VAR 0 2
25201: PPUSH
25202: LD_INT 4
25204: PPUSH
25205: LD_INT 1
25207: PPUSH
25208: CALL_OW 273
25212: PPUSH
25213: CALL_OW 118
// exit ;
25217: GO 25223
// end ; until false ;
25219: LD_INT 0
25221: IFFALSE 24901
// end ;
25223: PPOPN 3
25225: END
// every 0 0$1 + 0 0$0.3 do
25226: GO 25228
25228: DISABLE
// begin repeat wait ( 0 0$1 ) ;
25229: LD_INT 35
25231: PPUSH
25232: CALL_OW 67
// if traitors_answer > 0 then
25236: LD_EXP 70
25240: PUSH
25241: LD_INT 0
25243: GREATER
25244: IFFALSE 25248
// exit ;
25246: GO 25298
// if russians_surrender or ContactTime ( [ you , you_alt ] ) <= 0 0$2 then
25248: LD_EXP 76
25252: PUSH
25253: LD_EXP 2
25257: PUSH
25258: LD_EXP 5
25262: PUSH
25263: EMPTY
25264: LIST
25265: LIST
25266: PPUSH
25267: CALL_OW 462
25271: PUSH
25272: LD_INT 70
25274: LESSEQUAL
25275: OR
25276: IFFALSE 25294
// begin traitors_pullback = true ;
25278: LD_ADDR_EXP 72
25282: PUSH
25283: LD_INT 1
25285: ST_TO_ADDR
// scout_pullback = true ;
25286: LD_ADDR_EXP 71
25290: PUSH
25291: LD_INT 1
25293: ST_TO_ADDR
// end ; until false ;
25294: LD_INT 0
25296: IFFALSE 25229
// end ;
25298: END
// every 0 0$1 + 0 0$0.1 do var i , near_traitor , near_player_un , player_units , temp_list , x , y , temp_value , dist ;
25299: GO 25301
25301: DISABLE
25302: LD_INT 0
25304: PPUSH
25305: PPUSH
25306: PPUSH
25307: PPUSH
25308: PPUSH
25309: PPUSH
25310: PPUSH
25311: PPUSH
25312: PPUSH
// begin repeat wait ( 0 0$0.5 ) ;
25313: LD_INT 18
25315: PPUSH
25316: CALL_OW 67
// if traitors_pullback then
25320: LD_EXP 72
25324: IFFALSE 25328
// exit ;
25326: GO 26524
// if UnitFilter ( traitors_humans , [ f_see , you ] ) > 0 then
25328: LD_EXP 68
25332: PPUSH
25333: LD_INT 101
25335: PUSH
25336: LD_EXP 2
25340: PUSH
25341: EMPTY
25342: LIST
25343: LIST
25344: PPUSH
25345: CALL_OW 72
25349: PUSH
25350: LD_INT 0
25352: GREATER
25353: IFFALSE 26520
// begin x = GetX ( traitors_leader ) ;
25355: LD_ADDR_VAR 0 6
25359: PUSH
25360: LD_EXP 15
25364: PPUSH
25365: CALL_OW 250
25369: ST_TO_ADDR
// y = GetY ( traitors_leader ) ;
25370: LD_ADDR_VAR 0 7
25374: PUSH
25375: LD_EXP 15
25379: PPUSH
25380: CALL_OW 251
25384: ST_TO_ADDR
// PlaceSeeing ( x , y , you , - 7 ) ;
25385: LD_VAR 0 6
25389: PPUSH
25390: LD_VAR 0 7
25394: PPUSH
25395: LD_EXP 2
25399: PPUSH
25400: LD_INT 7
25402: NEG
25403: PPUSH
25404: CALL_OW 330
// ComStop ( traitors_vehicles ) ;
25408: LD_EXP 69
25412: PPUSH
25413: CALL_OW 141
// InGameOn ;
25417: CALL_OW 8
// player_units = FilterAllUnits ( [ f_side , you ] ) ;
25421: LD_ADDR_VAR 0 4
25425: PUSH
25426: LD_INT 22
25428: PUSH
25429: LD_EXP 2
25433: PUSH
25434: EMPTY
25435: LIST
25436: LIST
25437: PPUSH
25438: CALL_OW 69
25442: ST_TO_ADDR
// DeselectUnits ( player_units ) ;
25443: LD_VAR 0 4
25447: PPUSH
25448: CALL_OW 491
// temp_list = [ ] ;
25452: LD_ADDR_VAR 0 5
25456: PUSH
25457: EMPTY
25458: ST_TO_ADDR
// for i in player_units do
25459: LD_ADDR_VAR 0 1
25463: PUSH
25464: LD_VAR 0 4
25468: PUSH
25469: FOR_IN
25470: IFFALSE 25505
// temp_list = temp_list ^ GetDistUnitXY ( i , x , y ) ;
25472: LD_ADDR_VAR 0 5
25476: PUSH
25477: LD_VAR 0 5
25481: PUSH
25482: LD_VAR 0 1
25486: PPUSH
25487: LD_VAR 0 6
25491: PPUSH
25492: LD_VAR 0 7
25496: PPUSH
25497: CALL_OW 297
25501: ADD
25502: ST_TO_ADDR
25503: GO 25469
25505: POP
25506: POP
// near_player_un = WorstFromListByList ( player_units , temp_list ) ;
25507: LD_ADDR_VAR 0 3
25511: PUSH
25512: LD_VAR 0 4
25516: PPUSH
25517: LD_VAR 0 5
25521: PPUSH
25522: CALL_OW 78
25526: ST_TO_ADDR
// player_units = UnitFilter ( player_units , [ f_dist , near_player_un , 15 ] ) ;
25527: LD_ADDR_VAR 0 4
25531: PUSH
25532: LD_VAR 0 4
25536: PPUSH
25537: LD_INT 91
25539: PUSH
25540: LD_VAR 0 3
25544: PUSH
25545: LD_INT 15
25547: PUSH
25548: EMPTY
25549: LIST
25550: LIST
25551: LIST
25552: PPUSH
25553: CALL_OW 72
25557: ST_TO_ADDR
// CenterOnXY ( ( x + GetX ( near_player_un ) ) / 2 , ( y + GetY ( near_player_un ) ) / 2 ) ;
25558: LD_VAR 0 6
25562: PUSH
25563: LD_VAR 0 3
25567: PPUSH
25568: CALL_OW 250
25572: PLUS
25573: PUSH
25574: LD_INT 2
25576: DIVREAL
25577: PPUSH
25578: LD_VAR 0 7
25582: PUSH
25583: LD_VAR 0 3
25587: PPUSH
25588: CALL_OW 251
25592: PLUS
25593: PUSH
25594: LD_INT 2
25596: DIVREAL
25597: PPUSH
25598: CALL_OW 84
// near_traitor = traitors_humans [ 1 ] ;
25602: LD_ADDR_VAR 0 2
25606: PUSH
25607: LD_EXP 68
25611: PUSH
25612: LD_INT 1
25614: ARRAY
25615: ST_TO_ADDR
// dist = GetDistUnits ( near_traitor , near_player_un ) ;
25616: LD_ADDR_VAR 0 9
25620: PUSH
25621: LD_VAR 0 2
25625: PPUSH
25626: LD_VAR 0 3
25630: PPUSH
25631: CALL_OW 296
25635: ST_TO_ADDR
// for i in traitors_humans do
25636: LD_ADDR_VAR 0 1
25640: PUSH
25641: LD_EXP 68
25645: PUSH
25646: FOR_IN
25647: IFFALSE 25703
// begin temp_value = GetDistUnits ( i , near_player_un ) ;
25649: LD_ADDR_VAR 0 8
25653: PUSH
25654: LD_VAR 0 1
25658: PPUSH
25659: LD_VAR 0 3
25663: PPUSH
25664: CALL_OW 296
25668: ST_TO_ADDR
// if temp_value < dist then
25669: LD_VAR 0 8
25673: PUSH
25674: LD_VAR 0 9
25678: LESS
25679: IFFALSE 25701
// begin dist = temp_value ;
25681: LD_ADDR_VAR 0 9
25685: PUSH
25686: LD_VAR 0 8
25690: ST_TO_ADDR
// near_traitor = i ;
25691: LD_ADDR_VAR 0 2
25695: PUSH
25696: LD_VAR 0 1
25700: ST_TO_ADDR
// end ; end ;
25701: GO 25646
25703: POP
25704: POP
// temp_value = AI_GetTurnDirection ( GetX ( near_traitor ) , GetY ( near_traitor ) , GetX ( near_player_un ) , GetY ( near_player_un ) ) ;
25705: LD_ADDR_VAR 0 8
25709: PUSH
25710: LD_VAR 0 2
25714: PPUSH
25715: CALL_OW 250
25719: PPUSH
25720: LD_VAR 0 2
25724: PPUSH
25725: CALL_OW 251
25729: PPUSH
25730: LD_VAR 0 3
25734: PPUSH
25735: CALL_OW 250
25739: PPUSH
25740: LD_VAR 0 3
25744: PPUSH
25745: CALL_OW 251
25749: PPUSH
25750: CALL 24426 0 4
25754: ST_TO_ADDR
// ComMoveXY ( player_units , ShiftX ( GetX ( near_traitor ) , temp_value , 3 ) , ShiftY ( GetY ( near_traitor ) , temp_value , 3 ) ) ;
25755: LD_VAR 0 4
25759: PPUSH
25760: LD_VAR 0 2
25764: PPUSH
25765: CALL_OW 250
25769: PPUSH
25770: LD_VAR 0 8
25774: PPUSH
25775: LD_INT 3
25777: PPUSH
25778: CALL_OW 272
25782: PPUSH
25783: LD_VAR 0 2
25787: PPUSH
25788: CALL_OW 251
25792: PPUSH
25793: LD_VAR 0 8
25797: PPUSH
25798: LD_INT 3
25800: PPUSH
25801: CALL_OW 273
25805: PPUSH
25806: CALL_OW 111
// AddComTurnXY ( player_units , x , y ) ;
25810: LD_VAR 0 4
25814: PPUSH
25815: LD_VAR 0 6
25819: PPUSH
25820: LD_VAR 0 7
25824: PPUSH
25825: CALL_OW 178
// ComTurnUnit ( traitors_humans , near_player_un ) ;
25829: LD_EXP 68
25833: PPUSH
25834: LD_VAR 0 3
25838: PPUSH
25839: CALL_OW 119
// if player_units > 1 then
25843: LD_VAR 0 4
25847: PUSH
25848: LD_INT 1
25850: GREATER
25851: IFFALSE 25863
// temp_value = a else
25853: LD_ADDR_VAR 0 8
25857: PUSH
25858: LD_STRING a
25860: ST_TO_ADDR
25861: GO 25871
// temp_value = b ;
25863: LD_ADDR_VAR 0 8
25867: PUSH
25868: LD_STRING b
25870: ST_TO_ADDR
// if not traitors_leader_is_substitute then
25871: LD_EXP 67
25875: NOT
25876: IFFALSE 25922
// begin Say ( traitors_leader , D3-Go-1 & temp_value ) ;
25878: LD_EXP 15
25882: PPUSH
25883: LD_STRING D3-Go-1
25885: PUSH
25886: LD_VAR 0 8
25890: STR
25891: PPUSH
25892: CALL_OW 88
// Say ( Heike , D3-H-1a ) ;
25896: LD_EXP 7
25900: PPUSH
25901: LD_STRING D3-H-1a
25903: PPUSH
25904: CALL_OW 88
// Say ( traitors_leader , D3-Go-2 ) ;
25908: LD_EXP 15
25912: PPUSH
25913: LD_STRING D3-Go-2
25915: PPUSH
25916: CALL_OW 88
// end else
25920: GO 25964
// begin Say ( traitors_leader , D3-TLeader-1 & temp_value ) ;
25922: LD_EXP 15
25926: PPUSH
25927: LD_STRING D3-TLeader-1
25929: PUSH
25930: LD_VAR 0 8
25934: STR
25935: PPUSH
25936: CALL_OW 88
// Say ( Heike , D3-H-1b ) ;
25940: LD_EXP 7
25944: PPUSH
25945: LD_STRING D3-H-1b
25947: PPUSH
25948: CALL_OW 88
// Say ( traitors_leader , D3-TLeader-2 ) ;
25952: LD_EXP 15
25956: PPUSH
25957: LD_STRING D3-TLeader-2
25959: PPUSH
25960: CALL_OW 88
// end ; if not oswald_is_substitute then
25964: LD_EXP 62
25968: NOT
25969: IFFALSE 25985
// Say ( Oswald , D3-Os-1 ) else
25971: LD_EXP 9
25975: PPUSH
25976: LD_STRING D3-Os-1
25978: PPUSH
25979: CALL_OW 88
25983: GO 25997
// Say ( Oswald , D3-Os_sub-1 ) ;
25985: LD_EXP 9
25989: PPUSH
25990: LD_STRING D3-Os_sub-1
25992: PPUSH
25993: CALL_OW 88
// if not traitors_leader_is_substitute then
25997: LD_EXP 67
26001: NOT
26002: IFFALSE 26018
// Say ( traitors_leader , D3-Go-3 ) else
26004: LD_EXP 15
26008: PPUSH
26009: LD_STRING D3-Go-3
26011: PPUSH
26012: CALL_OW 88
26016: GO 26030
// Say ( traitors_leader , D3-TLeader-3 ) ;
26018: LD_EXP 15
26022: PPUSH
26023: LD_STRING D3-TLeader-3
26025: PPUSH
26026: CALL_OW 88
// Say ( Heike , D3-H-2 ) ;
26030: LD_EXP 7
26034: PPUSH
26035: LD_STRING D3-H-2
26037: PPUSH
26038: CALL_OW 88
// if Oswald in player_units then
26042: LD_EXP 9
26046: PUSH
26047: LD_VAR 0 4
26051: IN
26052: IFFALSE 26120
// begin if not oswald_is_substitute then
26054: LD_EXP 62
26058: NOT
26059: IFFALSE 26075
// Say ( Oswald , D3-Os-2 ) else
26061: LD_EXP 9
26065: PPUSH
26066: LD_STRING D3-Os-2
26068: PPUSH
26069: CALL_OW 88
26073: GO 26087
// Say ( Oswald , D3-Os_sub-2 ) ;
26075: LD_EXP 9
26079: PPUSH
26080: LD_STRING D3-Os_sub-2
26082: PPUSH
26083: CALL_OW 88
// if not traitors_leader_is_substitute then
26087: LD_EXP 67
26091: NOT
26092: IFFALSE 26108
// Say ( traitors_leader , D3-Go-4 ) else
26094: LD_EXP 15
26098: PPUSH
26099: LD_STRING D3-Go-4
26101: PPUSH
26102: CALL_OW 88
26106: GO 26120
// Say ( traitors_leader , D3-TLeader-4 ) ;
26108: LD_EXP 15
26112: PPUSH
26113: LD_STRING D3-TLeader-4
26115: PPUSH
26116: CALL_OW 88
// end ; if not traitors_leader_is_substitute then
26120: LD_EXP 67
26124: NOT
26125: IFFALSE 26141
// Say ( traitors_leader , D3-Go-5 ) else
26127: LD_EXP 15
26131: PPUSH
26132: LD_STRING D3-Go-5
26134: PPUSH
26135: CALL_OW 88
26139: GO 26153
// Say ( traitors_leader , D3-TLeader-5 ) ;
26141: LD_EXP 15
26145: PPUSH
26146: LD_STRING D3-TLeader-5
26148: PPUSH
26149: CALL_OW 88
// if Oswald in player_units then
26153: LD_EXP 9
26157: PUSH
26158: LD_VAR 0 4
26162: IN
26163: IFFALSE 26231
// begin if not oswald_is_substitute then
26165: LD_EXP 62
26169: NOT
26170: IFFALSE 26186
// Say ( Oswald , D3-Os-3 ) else
26172: LD_EXP 9
26176: PPUSH
26177: LD_STRING D3-Os-3
26179: PPUSH
26180: CALL_OW 88
26184: GO 26198
// Say ( Oswald , D3-Os_sub-3 ) ;
26186: LD_EXP 9
26190: PPUSH
26191: LD_STRING D3-Os_sub-3
26193: PPUSH
26194: CALL_OW 88
// if not kurt_is_substitute then
26198: LD_EXP 63
26202: NOT
26203: IFFALSE 26219
// Say ( Kurt , D3-Ku-1 ) else
26205: LD_EXP 10
26209: PPUSH
26210: LD_STRING D3-Ku-1
26212: PPUSH
26213: CALL_OW 88
26217: GO 26231
// Say ( Kurt , D3-Ku_sub-1 ) ;
26219: LD_EXP 10
26223: PPUSH
26224: LD_STRING D3-Ku_sub-1
26226: PPUSH
26227: CALL_OW 88
// end ; wait ( 0 0$0.3 ) ;
26231: LD_INT 10
26233: PPUSH
26234: CALL_OW 67
// traitors_answer = Query ( QCooperateTraitors ) ;
26238: LD_ADDR_EXP 70
26242: PUSH
26243: LD_STRING QCooperateTraitors
26245: PPUSH
26246: CALL_OW 97
26250: ST_TO_ADDR
// case traitors_answer of 1 :
26251: LD_EXP 70
26255: PUSH
26256: LD_INT 1
26258: DOUBLE
26259: EQUAL
26260: IFTRUE 26264
26262: GO 26279
26264: POP
// begin Say ( Heike , D3-1-H-1 ) ;
26265: LD_EXP 7
26269: PPUSH
26270: LD_STRING D3-1-H-1
26272: PPUSH
26273: CALL_OW 88
// end ; 2 :
26277: GO 26372
26279: LD_INT 2
26281: DOUBLE
26282: EQUAL
26283: IFTRUE 26287
26285: GO 26371
26287: POP
// begin if not traitors_leader_is_substitute then
26288: LD_EXP 67
26292: NOT
26293: IFFALSE 26333
// begin Say ( Heike , D3-2-H-1a ) ;
26295: LD_EXP 7
26299: PPUSH
26300: LD_STRING D3-2-H-1a
26302: PPUSH
26303: CALL_OW 88
// Say ( traitors_leader , D3-2-Go-1 ) ;
26307: LD_EXP 15
26311: PPUSH
26312: LD_STRING D3-2-Go-1
26314: PPUSH
26315: CALL_OW 88
// Say ( traitors_leader , D3-2-Go-2 ) ;
26319: LD_EXP 15
26323: PPUSH
26324: LD_STRING D3-2-Go-2
26326: PPUSH
26327: CALL_OW 88
// end else
26331: GO 26369
// begin Say ( Heike , D3-2-H-1b ) ;
26333: LD_EXP 7
26337: PPUSH
26338: LD_STRING D3-2-H-1b
26340: PPUSH
26341: CALL_OW 88
// Say ( traitors_leader , D3-2-TLeader-1 ) ;
26345: LD_EXP 15
26349: PPUSH
26350: LD_STRING D3-2-TLeader-1
26352: PPUSH
26353: CALL_OW 88
// Say ( traitors_leader , D3-2-TLeader-2 ) ;
26357: LD_EXP 15
26361: PPUSH
26362: LD_STRING D3-2-TLeader-2
26364: PPUSH
26365: CALL_OW 88
// end ; end ; end ;
26369: GO 26372
26371: POP
// InGameOff ;
26372: CALL_OW 9
// ComFree ( player_units ) ;
26376: LD_VAR 0 4
26380: PPUSH
26381: CALL_OW 139
// ComFree ( traitors_humans ) ;
26385: LD_EXP 68
26389: PPUSH
26390: CALL_OW 139
// RemoveSeeing ( x , y , you ) ;
26394: LD_VAR 0 6
26398: PPUSH
26399: LD_VAR 0 7
26403: PPUSH
26404: LD_EXP 2
26408: PPUSH
26409: CALL_OW 331
// case traitors_answer of 1 :
26413: LD_EXP 70
26417: PUSH
26418: LD_INT 1
26420: DOUBLE
26421: EQUAL
26422: IFTRUE 26426
26424: GO 26490
26426: POP
// begin for i in traitors_humans ^ traitors_vehicles do
26427: LD_ADDR_VAR 0 1
26431: PUSH
26432: LD_EXP 68
26436: PUSH
26437: LD_EXP 69
26441: ADD
26442: PUSH
26443: FOR_IN
26444: IFFALSE 26462
// SetSide ( i , you ) ;
26446: LD_VAR 0 1
26450: PPUSH
26451: LD_EXP 2
26455: PPUSH
26456: CALL_OW 235
26460: GO 26443
26462: POP
26463: POP
// starting_humans = starting_humans ^ traitors_humans ;
26464: LD_ADDR_EXP 85
26468: PUSH
26469: LD_EXP 85
26473: PUSH
26474: LD_EXP 68
26478: ADD
26479: ST_TO_ADDR
// traitors_under_player_control = true ;
26480: LD_ADDR_EXP 102
26484: PUSH
26485: LD_INT 1
26487: ST_TO_ADDR
// end ; 2 :
26488: GO 26518
26490: LD_INT 2
26492: DOUBLE
26493: EQUAL
26494: IFTRUE 26498
26496: GO 26517
26498: POP
// begin traitors_pullback = true ;
26499: LD_ADDR_EXP 72
26503: PUSH
26504: LD_INT 1
26506: ST_TO_ADDR
// scout_pullback = true ;
26507: LD_ADDR_EXP 71
26511: PUSH
26512: LD_INT 1
26514: ST_TO_ADDR
// end ; end ;
26515: GO 26518
26517: POP
// exit ;
26518: GO 26524
// end ; until false ;
26520: LD_INT 0
26522: IFFALSE 25313
// end ;
26524: PPOPN 9
26526: END
// every 0 0$1 + 0 0$0.4 trigger traitors_answer = 1 do var i , un , temp_list , str ;
26527: LD_EXP 70
26531: PUSH
26532: LD_INT 1
26534: EQUAL
26535: IFFALSE 27364
26537: GO 26539
26539: DISABLE
26540: LD_INT 0
26542: PPUSH
26543: PPUSH
26544: PPUSH
26545: PPUSH
// begin repeat wait ( 0 0$1 ) ;
26546: LD_INT 35
26548: PPUSH
26549: CALL_OW 67
// if russians_surrender then
26553: LD_EXP 76
26557: IFFALSE 26561
// exit ;
26559: GO 27364
// if not traitors_under_player_control then
26561: LD_EXP 102
26565: NOT
26566: IFFALSE 26570
// exit ;
26568: GO 27364
// if IsDead ( traitors_leader ) then
26570: LD_EXP 15
26574: PPUSH
26575: CALL_OW 301
26579: IFFALSE 27102
// begin DialogueOn ;
26581: CALL_OW 6
// if not traitors_leader_is_substitute then
26585: LD_EXP 67
26589: NOT
26590: IFFALSE 26602
// str = a else
26592: LD_ADDR_VAR 0 4
26596: PUSH
26597: LD_STRING a
26599: ST_TO_ADDR
26600: GO 26610
// str = b ;
26602: LD_ADDR_VAR 0 4
26606: PUSH
26607: LD_STRING b
26609: ST_TO_ADDR
// if IsLive ( Willard ) then
26610: LD_EXP 16
26614: PPUSH
26615: CALL_OW 300
26619: IFFALSE 26641
// begin ForceSay ( Willard , D13-Wi-1 & str ) ;
26621: LD_EXP 16
26625: PPUSH
26626: LD_STRING D13-Wi-1
26628: PUSH
26629: LD_VAR 0 4
26633: STR
26634: PPUSH
26635: CALL_OW 91
// end else
26639: GO 26748
// begin temp_list = traitors_humans diff scout ;
26641: LD_ADDR_VAR 0 3
26645: PUSH
26646: LD_EXP 68
26650: PUSH
26651: LD_EXP 14
26655: DIFF
26656: ST_TO_ADDR
// if temp_list > 0 then
26657: LD_VAR 0 3
26661: PUSH
26662: LD_INT 0
26664: GREATER
26665: IFFALSE 26748
// begin un = temp_list [ Rand ( 1 , temp_list + 0 ) ] ;
26667: LD_ADDR_VAR 0 2
26671: PUSH
26672: LD_VAR 0 3
26676: PUSH
26677: LD_INT 1
26679: PPUSH
26680: LD_VAR 0 3
26684: PUSH
26685: LD_INT 0
26687: PLUS
26688: PPUSH
26689: CALL_OW 12
26693: ARRAY
26694: ST_TO_ADDR
// if GetSex ( un ) = sex_male then
26695: LD_VAR 0 2
26699: PPUSH
26700: CALL_OW 258
26704: PUSH
26705: LD_INT 1
26707: EQUAL
26708: IFFALSE 26730
// ForceSay ( un , D13-SomeM-1 & str ) else
26710: LD_VAR 0 2
26714: PPUSH
26715: LD_STRING D13-SomeM-1
26717: PUSH
26718: LD_VAR 0 4
26722: STR
26723: PPUSH
26724: CALL_OW 91
26728: GO 26748
// ForceSay ( un , D13-SomeF-1 & str ) ;
26730: LD_VAR 0 2
26734: PPUSH
26735: LD_STRING D13-SomeF-1
26737: PUSH
26738: LD_VAR 0 4
26742: STR
26743: PPUSH
26744: CALL_OW 91
// end ; end ; DialogueOff ;
26748: CALL_OW 7
// scout_pullback = true ;
26752: LD_ADDR_EXP 71
26756: PUSH
26757: LD_INT 1
26759: ST_TO_ADDR
// starting_humans = starting_humans diff original_traitors_humans ;
26760: LD_ADDR_EXP 85
26764: PUSH
26765: LD_EXP 85
26769: PUSH
26770: LD_EXP 73
26774: DIFF
26775: ST_TO_ADDR
// activate_traitor_mines = true ;
26776: LD_ADDR_EXP 100
26780: PUSH
26781: LD_INT 1
26783: ST_TO_ADDR
// traitors_under_player_control = false ;
26784: LD_ADDR_EXP 102
26788: PUSH
26789: LD_INT 0
26791: ST_TO_ADDR
// for i in traitors_humans do
26792: LD_ADDR_VAR 0 1
26796: PUSH
26797: LD_EXP 68
26801: PUSH
26802: FOR_IN
26803: IFFALSE 26875
// begin SetSide ( i , you_alt ) ;
26805: LD_VAR 0 1
26809: PPUSH
26810: LD_EXP 5
26814: PPUSH
26815: CALL_OW 235
// un = IsInUnit ( i ) ;
26819: LD_ADDR_VAR 0 2
26823: PUSH
26824: LD_VAR 0 1
26828: PPUSH
26829: CALL_OW 310
26833: ST_TO_ADDR
// if un > 0 and GetType ( un ) = unit_vehicle then
26834: LD_VAR 0 2
26838: PUSH
26839: LD_INT 0
26841: GREATER
26842: PUSH
26843: LD_VAR 0 2
26847: PPUSH
26848: CALL_OW 247
26852: PUSH
26853: LD_INT 2
26855: EQUAL
26856: AND
26857: IFFALSE 26873
// SetSide ( un , you_alt ) ;
26859: LD_VAR 0 2
26863: PPUSH
26864: LD_EXP 5
26868: PPUSH
26869: CALL_OW 235
// end ;
26873: GO 26802
26875: POP
26876: POP
// SetAttitude ( you , you_alt , att_enemy , true ) ;
26877: LD_EXP 2
26881: PPUSH
26882: LD_EXP 5
26886: PPUSH
26887: LD_INT 2
26889: PPUSH
26890: LD_INT 1
26892: PPUSH
26893: CALL_OW 80
// repeat if IsDead ( Heike ) then
26897: LD_EXP 7
26901: PPUSH
26902: CALL_OW 301
26906: IFFALSE 26910
// continue ;
26908: GO 26897
// temp_list = [ GetX ( Heike ) , GetY ( Heike ) ] ;
26910: LD_ADDR_VAR 0 3
26914: PUSH
26915: LD_EXP 7
26919: PPUSH
26920: CALL_OW 250
26924: PUSH
26925: LD_EXP 7
26929: PPUSH
26930: CALL_OW 251
26934: PUSH
26935: EMPTY
26936: LIST
26937: LIST
26938: ST_TO_ADDR
// for i in traitors_humans do
26939: LD_ADDR_VAR 0 1
26943: PUSH
26944: LD_EXP 68
26948: PUSH
26949: FOR_IN
26950: IFFALSE 27079
// begin un = IsInUnit ( i ) ;
26952: LD_ADDR_VAR 0 2
26956: PUSH
26957: LD_VAR 0 1
26961: PPUSH
26962: CALL_OW 310
26966: ST_TO_ADDR
// if un = 0 then
26967: LD_VAR 0 2
26971: PUSH
26972: LD_INT 0
26974: EQUAL
26975: IFFALSE 27006
// ComAgressiveMove ( i , temp_list [ 1 ] , temp_list [ 2 ] ) else
26977: LD_VAR 0 1
26981: PPUSH
26982: LD_VAR 0 3
26986: PUSH
26987: LD_INT 1
26989: ARRAY
26990: PPUSH
26991: LD_VAR 0 3
26995: PUSH
26996: LD_INT 2
26998: ARRAY
26999: PPUSH
27000: CALL_OW 114
27004: GO 27077
// if GetType ( un ) = unit_vehicle and FindDangerousNonhumanUnits ( [ un ] ) > 0 then
27006: LD_VAR 0 2
27010: PPUSH
27011: CALL_OW 247
27015: PUSH
27016: LD_INT 2
27018: EQUAL
27019: PUSH
27020: LD_VAR 0 2
27024: PUSH
27025: EMPTY
27026: LIST
27027: PPUSH
27028: CALL 47104 0 1
27032: PUSH
27033: LD_INT 0
27035: GREATER
27036: AND
27037: IFFALSE 27068
// ComAgressiveMove ( un , temp_list [ 1 ] , temp_list [ 2 ] ) else
27039: LD_VAR 0 2
27043: PPUSH
27044: LD_VAR 0 3
27048: PUSH
27049: LD_INT 1
27051: ARRAY
27052: PPUSH
27053: LD_VAR 0 3
27057: PUSH
27058: LD_INT 2
27060: ARRAY
27061: PPUSH
27062: CALL_OW 114
27066: GO 27077
// ComExitBuilding ( un ) ;
27068: LD_VAR 0 2
27072: PPUSH
27073: CALL_OW 122
// end ;
27077: GO 26949
27079: POP
27080: POP
// wait ( 0 0$1 ) ;
27081: LD_INT 35
27083: PPUSH
27084: CALL_OW 67
// until traitors_humans = 0 ;
27088: LD_EXP 68
27092: PUSH
27093: LD_INT 0
27095: EQUAL
27096: IFFALSE 26897
// exit ;
27098: GO 27364
// end else
27100: GO 27360
// if UnitFilter ( original_traitors_humans , [ f_ok ] ) <= ( original_traitors_humans + 0 ) div 2 + 1 and UnitFilter ( original_traitors_humans , [ f_alive ] ) < original_traitors_humans + 0 then
27102: LD_EXP 73
27106: PPUSH
27107: LD_INT 50
27109: PUSH
27110: EMPTY
27111: LIST
27112: PPUSH
27113: CALL_OW 72
27117: PUSH
27118: LD_EXP 73
27122: PUSH
27123: LD_INT 0
27125: PLUS
27126: PUSH
27127: LD_INT 2
27129: DIV
27130: PUSH
27131: LD_INT 1
27133: PLUS
27134: LESSEQUAL
27135: PUSH
27136: LD_EXP 73
27140: PPUSH
27141: LD_INT 51
27143: PUSH
27144: EMPTY
27145: LIST
27146: PPUSH
27147: CALL_OW 72
27151: PUSH
27152: LD_EXP 73
27156: PUSH
27157: LD_INT 0
27159: PLUS
27160: LESS
27161: AND
27162: IFFALSE 27360
// begin DialogueOn ;
27164: CALL_OW 6
// if not traitors_leader_is_substitute then
27168: LD_EXP 67
27172: NOT
27173: IFFALSE 27189
// ForceSay ( traitors_leader , D13-Go-1 ) else
27175: LD_EXP 15
27179: PPUSH
27180: LD_STRING D13-Go-1
27182: PPUSH
27183: CALL_OW 91
27187: GO 27201
// ForceSay ( traitors_leader , D13-TLeader-1 ) ;
27189: LD_EXP 15
27193: PPUSH
27194: LD_STRING D13-TLeader-1
27196: PPUSH
27197: CALL_OW 91
// DialogueOff ;
27201: CALL_OW 7
// traitors_pullback = true ;
27205: LD_ADDR_EXP 72
27209: PUSH
27210: LD_INT 1
27212: ST_TO_ADDR
// scout_pullback = true ;
27213: LD_ADDR_EXP 71
27217: PUSH
27218: LD_INT 1
27220: ST_TO_ADDR
// starting_humans = starting_humans diff original_traitors_humans ;
27221: LD_ADDR_EXP 85
27225: PUSH
27226: LD_EXP 85
27230: PUSH
27231: LD_EXP 73
27235: DIFF
27236: ST_TO_ADDR
// activate_traitor_mines = true ;
27237: LD_ADDR_EXP 100
27241: PUSH
27242: LD_INT 1
27244: ST_TO_ADDR
// traitors_under_player_control = false ;
27245: LD_ADDR_EXP 102
27249: PUSH
27250: LD_INT 0
27252: ST_TO_ADDR
// for i in traitors_humans do
27253: LD_ADDR_VAR 0 1
27257: PUSH
27258: LD_EXP 68
27262: PUSH
27263: FOR_IN
27264: IFFALSE 27336
// begin SetSide ( i , you_alt ) ;
27266: LD_VAR 0 1
27270: PPUSH
27271: LD_EXP 5
27275: PPUSH
27276: CALL_OW 235
// un = IsInUnit ( i ) ;
27280: LD_ADDR_VAR 0 2
27284: PUSH
27285: LD_VAR 0 1
27289: PPUSH
27290: CALL_OW 310
27294: ST_TO_ADDR
// if un > 0 and GetType ( un ) = unit_vehicle then
27295: LD_VAR 0 2
27299: PUSH
27300: LD_INT 0
27302: GREATER
27303: PUSH
27304: LD_VAR 0 2
27308: PPUSH
27309: CALL_OW 247
27313: PUSH
27314: LD_INT 2
27316: EQUAL
27317: AND
27318: IFFALSE 27334
// SetSide ( un , you_alt ) ;
27320: LD_VAR 0 2
27324: PPUSH
27325: LD_EXP 5
27329: PPUSH
27330: CALL_OW 235
// end ;
27334: GO 27263
27336: POP
27337: POP
// SetAttitude ( you , you_alt , att_neutral , true ) ;
27338: LD_EXP 2
27342: PPUSH
27343: LD_EXP 5
27347: PPUSH
27348: LD_INT 0
27350: PPUSH
27351: LD_INT 1
27353: PPUSH
27354: CALL_OW 80
// exit ;
27358: GO 27364
// end ; until false ;
27360: LD_INT 0
27362: IFFALSE 26546
// end ;
27364: PPOPN 4
27366: END
// every 0 0$1 do var i , temp_list , temp_list_2 , temp_value , mechanics_list , temp_unit ; var vehicles_drivers ;
27367: GO 27369
27369: DISABLE
27370: LD_INT 0
27372: PPUSH
27373: PPUSH
27374: PPUSH
27375: PPUSH
27376: PPUSH
27377: PPUSH
27378: PPUSH
// begin vehicles_drivers = [ ] ;
27379: LD_ADDR_VAR 0 7
27383: PUSH
27384: EMPTY
27385: ST_TO_ADDR
// repeat wait ( 0 0$0.7 ) ;
27386: LD_INT 24
27388: PPUSH
27389: CALL_OW 67
// if traitors_humans = 0 then
27393: LD_EXP 68
27397: PUSH
27398: LD_INT 0
27400: EQUAL
27401: IFFALSE 27405
// exit ;
27403: GO 28200
// if not traitors_pullback then
27405: LD_EXP 72
27409: NOT
27410: IFFALSE 27414
// continue ;
27412: GO 27386
// temp_list = traitors_humans ;
27414: LD_ADDR_VAR 0 2
27418: PUSH
27419: LD_EXP 68
27423: ST_TO_ADDR
// for i = 1 to vehicles_drivers do
27424: LD_ADDR_VAR 0 1
27428: PUSH
27429: DOUBLE
27430: LD_INT 1
27432: DEC
27433: ST_TO_ADDR
27434: LD_VAR 0 7
27438: PUSH
27439: FOR_TO
27440: IFFALSE 27477
// begin if IsOk ( i ) then
27442: LD_VAR 0 1
27446: PPUSH
27447: CALL_OW 302
27451: IFFALSE 27475
// begin temp_list = temp_list diff vehicles_drivers [ i ] ;
27453: LD_ADDR_VAR 0 2
27457: PUSH
27458: LD_VAR 0 2
27462: PUSH
27463: LD_VAR 0 7
27467: PUSH
27468: LD_VAR 0 1
27472: ARRAY
27473: DIFF
27474: ST_TO_ADDR
// end ; end ;
27475: GO 27439
27477: POP
27478: POP
// mechanics_list = UnitFilter ( temp_list , [ f_class , class_mechanic ] ) ;
27479: LD_ADDR_VAR 0 5
27483: PUSH
27484: LD_VAR 0 2
27488: PPUSH
27489: LD_INT 25
27491: PUSH
27492: LD_INT 3
27494: PUSH
27495: EMPTY
27496: LIST
27497: LIST
27498: PPUSH
27499: CALL_OW 72
27503: ST_TO_ADDR
// for i in UnitFilter ( traitors_vehicles , [ f_ok ] ) do
27504: LD_ADDR_VAR 0 1
27508: PUSH
27509: LD_EXP 69
27513: PPUSH
27514: LD_INT 50
27516: PUSH
27517: EMPTY
27518: LIST
27519: PPUSH
27520: CALL_OW 72
27524: PUSH
27525: FOR_IN
27526: IFFALSE 27960
// begin if temp_list = 0 then
27528: LD_VAR 0 2
27532: PUSH
27533: LD_INT 0
27535: EQUAL
27536: IFFALSE 27540
// break ;
27538: GO 27960
// temp_value = false ;
27540: LD_ADDR_VAR 0 4
27544: PUSH
27545: LD_INT 0
27547: ST_TO_ADDR
// if vehicles_drivers < i then
27548: LD_VAR 0 7
27552: PUSH
27553: LD_VAR 0 1
27557: LESS
27558: IFFALSE 27570
// temp_value = true else
27560: LD_ADDR_VAR 0 4
27564: PUSH
27565: LD_INT 1
27567: ST_TO_ADDR
27568: GO 27597
// if not vehicles_drivers [ i ] in traitors_humans then
27570: LD_VAR 0 7
27574: PUSH
27575: LD_VAR 0 1
27579: ARRAY
27580: PUSH
27581: LD_EXP 68
27585: IN
27586: NOT
27587: IFFALSE 27597
// temp_value = true ;
27589: LD_ADDR_VAR 0 4
27593: PUSH
27594: LD_INT 1
27596: ST_TO_ADDR
// if temp_value then
27597: LD_VAR 0 4
27601: IFFALSE 27729
// begin if mechanics_list > 0 then
27603: LD_VAR 0 5
27607: PUSH
27608: LD_INT 0
27610: GREATER
27611: IFFALSE 27650
// vehicles_drivers = Replace ( vehicles_drivers , i , AllNearestUnitToUnit ( mechanics_list , i ) ) else
27613: LD_ADDR_VAR 0 7
27617: PUSH
27618: LD_VAR 0 7
27622: PPUSH
27623: LD_VAR 0 1
27627: PPUSH
27628: LD_VAR 0 5
27632: PPUSH
27633: LD_VAR 0 1
27637: PPUSH
27638: CALL_OW 75
27642: PPUSH
27643: CALL_OW 1
27647: ST_TO_ADDR
27648: GO 27685
// vehicles_drivers = Replace ( vehicles_drivers , i , AllNearestUnitToUnit ( temp_list , i ) ) ;
27650: LD_ADDR_VAR 0 7
27654: PUSH
27655: LD_VAR 0 7
27659: PPUSH
27660: LD_VAR 0 1
27664: PPUSH
27665: LD_VAR 0 2
27669: PPUSH
27670: LD_VAR 0 1
27674: PPUSH
27675: CALL_OW 75
27679: PPUSH
27680: CALL_OW 1
27684: ST_TO_ADDR
// temp_list = temp_list diff vehicles_drivers [ i ] ;
27685: LD_ADDR_VAR 0 2
27689: PUSH
27690: LD_VAR 0 2
27694: PUSH
27695: LD_VAR 0 7
27699: PUSH
27700: LD_VAR 0 1
27704: ARRAY
27705: DIFF
27706: ST_TO_ADDR
// mechanics_list = mechanics_list diff vehicles_drivers [ i ] ;
27707: LD_ADDR_VAR 0 5
27711: PUSH
27712: LD_VAR 0 5
27716: PUSH
27717: LD_VAR 0 7
27721: PUSH
27722: LD_VAR 0 1
27726: ARRAY
27727: DIFF
27728: ST_TO_ADDR
// end ; if vehicles_drivers [ i ] > 0 then
27729: LD_VAR 0 7
27733: PUSH
27734: LD_VAR 0 1
27738: ARRAY
27739: PUSH
27740: LD_INT 0
27742: GREATER
27743: IFFALSE 27958
// begin temp_unit = IsInUnit ( vehicles_drivers [ i ] ) ;
27745: LD_ADDR_VAR 0 6
27749: PUSH
27750: LD_VAR 0 7
27754: PUSH
27755: LD_VAR 0 1
27759: ARRAY
27760: PPUSH
27761: CALL_OW 310
27765: ST_TO_ADDR
// if temp_unit <> i then
27766: LD_VAR 0 6
27770: PUSH
27771: LD_VAR 0 1
27775: NONEQUAL
27776: IFFALSE 27949
// case GetType ( temp_unit ) of unit_vehicle :
27778: LD_VAR 0 6
27782: PPUSH
27783: CALL_OW 247
27787: PUSH
27788: LD_INT 2
27790: DOUBLE
27791: EQUAL
27792: IFTRUE 27796
27794: GO 27814
27796: POP
// ComExitVehicle ( vehicles_drivers [ i ] ) ; unit_building :
27797: LD_VAR 0 7
27801: PUSH
27802: LD_VAR 0 1
27806: ARRAY
27807: PPUSH
27808: CALL_OW 121
27812: GO 27947
27814: LD_INT 3
27816: DOUBLE
27817: EQUAL
27818: IFTRUE 27822
27820: GO 27840
27822: POP
// ComExitBuilding ( vehicles_drivers [ i ] ) ; else
27823: LD_VAR 0 7
27827: PUSH
27828: LD_VAR 0 1
27832: ARRAY
27833: PPUSH
27834: CALL_OW 122
27838: GO 27947
27840: POP
// begin ComEnterUnit ( vehicles_drivers [ i ] , i ) ;
27841: LD_VAR 0 7
27845: PUSH
27846: LD_VAR 0 1
27850: ARRAY
27851: PPUSH
27852: LD_VAR 0 1
27856: PPUSH
27857: CALL_OW 120
// if GetDistUnits ( vehicles_drivers [ i ] , i ) <= 4 then
27861: LD_VAR 0 7
27865: PUSH
27866: LD_VAR 0 1
27870: ARRAY
27871: PPUSH
27872: LD_VAR 0 1
27876: PPUSH
27877: CALL_OW 296
27881: PUSH
27882: LD_INT 4
27884: LESSEQUAL
27885: IFFALSE 27947
// begin temp_list_2 = UnitsInside ( i ) ;
27887: LD_ADDR_VAR 0 3
27891: PUSH
27892: LD_VAR 0 1
27896: PPUSH
27897: CALL_OW 313
27901: ST_TO_ADDR
// if temp_list_2 > 0 then
27902: LD_VAR 0 3
27906: PUSH
27907: LD_INT 0
27909: GREATER
27910: IFFALSE 27947
// if temp_list_2 [ 1 ] <> vehicles_drivers [ i ] then
27912: LD_VAR 0 3
27916: PUSH
27917: LD_INT 1
27919: ARRAY
27920: PUSH
27921: LD_VAR 0 7
27925: PUSH
27926: LD_VAR 0 1
27930: ARRAY
27931: NONEQUAL
27932: IFFALSE 27947
// ComExitVehicle ( temp_list_2 [ 1 ] ) ;
27934: LD_VAR 0 3
27938: PUSH
27939: LD_INT 1
27941: ARRAY
27942: PPUSH
27943: CALL_OW 121
// end ; end ; end else
27947: GO 27958
// TraitorPullback ( i ) ;
27949: LD_VAR 0 1
27953: PPUSH
27954: CALL 28203 0 1
// end ; end ;
27958: GO 27525
27960: POP
27961: POP
// for i in temp_list ^ traitors_vehicles do
27962: LD_ADDR_VAR 0 1
27966: PUSH
27967: LD_VAR 0 2
27971: PUSH
27972: LD_EXP 69
27976: ADD
27977: PUSH
27978: FOR_IN
27979: IFFALSE 28194
// if not IsInArea ( i , traitors_pullback_area ) then
27981: LD_VAR 0 1
27985: PPUSH
27986: LD_INT 5
27988: PPUSH
27989: CALL_OW 308
27993: NOT
27994: IFFALSE 28078
// begin if GetType ( i ) = unit_human then
27996: LD_VAR 0 1
28000: PPUSH
28001: CALL_OW 247
28005: PUSH
28006: LD_INT 1
28008: EQUAL
28009: IFFALSE 28076
// begin case GetType ( IsInUnit ( i ) ) of unit_vehicle :
28011: LD_VAR 0 1
28015: PPUSH
28016: CALL_OW 310
28020: PPUSH
28021: CALL_OW 247
28025: PUSH
28026: LD_INT 2
28028: DOUBLE
28029: EQUAL
28030: IFTRUE 28034
28032: GO 28046
28034: POP
// ComExitVehicle ( i ) ; unit_building :
28035: LD_VAR 0 1
28039: PPUSH
28040: CALL_OW 121
28044: GO 28076
28046: LD_INT 3
28048: DOUBLE
28049: EQUAL
28050: IFTRUE 28054
28052: GO 28066
28054: POP
// ComExitBuilding ( i ) ; else
28055: LD_VAR 0 1
28059: PPUSH
28060: CALL_OW 122
28064: GO 28076
28066: POP
// TraitorPullback ( i ) ; end ;
28067: LD_VAR 0 1
28071: PPUSH
28072: CALL 28203 0 1
// end ; end else
28076: GO 28192
// begin if GetType ( i ) = unit_vehicle then
28078: LD_VAR 0 1
28082: PPUSH
28083: CALL_OW 247
28087: PUSH
28088: LD_INT 2
28090: EQUAL
28091: IFFALSE 28167
// begin traitors_vehicles = traitors_vehicles diff i ;
28093: LD_ADDR_EXP 69
28097: PUSH
28098: LD_EXP 69
28102: PUSH
28103: LD_VAR 0 1
28107: DIFF
28108: ST_TO_ADDR
// temp_list_2 = UnitsInside ( i ) ;
28109: LD_ADDR_VAR 0 3
28113: PUSH
28114: LD_VAR 0 1
28118: PPUSH
28119: CALL_OW 313
28123: ST_TO_ADDR
// RemoveUnit ( i ) ;
28124: LD_VAR 0 1
28128: PPUSH
28129: CALL_OW 64
// if temp_list_2 > 0 then
28133: LD_VAR 0 3
28137: PUSH
28138: LD_INT 0
28140: GREATER
28141: IFFALSE 28159
// i = temp_list_2 [ 1 ] else
28143: LD_ADDR_VAR 0 1
28147: PUSH
28148: LD_VAR 0 3
28152: PUSH
28153: LD_INT 1
28155: ARRAY
28156: ST_TO_ADDR
28157: GO 28167
// i = 0 ;
28159: LD_ADDR_VAR 0 1
28163: PUSH
28164: LD_INT 0
28166: ST_TO_ADDR
// end ; traitors_humans = traitors_humans diff i ;
28167: LD_ADDR_EXP 68
28171: PUSH
28172: LD_EXP 68
28176: PUSH
28177: LD_VAR 0 1
28181: DIFF
28182: ST_TO_ADDR
// RemoveUnit ( i ) ;
28183: LD_VAR 0 1
28187: PPUSH
28188: CALL_OW 64
// end ;
28192: GO 27978
28194: POP
28195: POP
// until false ;
28196: LD_INT 0
28198: IFFALSE 27386
// end ;
28200: PPOPN 7
28202: END
// function TraitorPullback ( un ) ; begin
28203: LD_INT 0
28205: PPUSH
// if IsInArea ( un , escape_area_3 ) then
28206: LD_VAR 0 1
28210: PPUSH
28211: LD_INT 9
28213: PPUSH
28214: CALL_OW 308
28218: IFFALSE 28237
// ComMoveXY ( un , 147 , 16 ) else
28220: LD_VAR 0 1
28224: PPUSH
28225: LD_INT 147
28227: PPUSH
28228: LD_INT 16
28230: PPUSH
28231: CALL_OW 111
28235: GO 28249
// ComMoveToArea ( un , traitors_pullback_area ) ;
28237: LD_VAR 0 1
28241: PPUSH
28242: LD_INT 5
28244: PPUSH
28245: CALL_OW 113
// end ;
28249: LD_VAR 0 2
28253: RET
// every 0 0$1 + 0 0$0.1 do
28254: GO 28256
28256: DISABLE
// begin repeat wait ( 0 0$1 ) ;
28257: LD_INT 35
28259: PPUSH
28260: CALL_OW 67
// if not IsPlaced ( scout ) then
28264: LD_EXP 14
28268: PPUSH
28269: CALL_OW 305
28273: NOT
28274: IFFALSE 28278
// exit ;
28276: GO 28338
// if not scout_pullback then
28278: LD_EXP 71
28282: NOT
28283: IFFALSE 28287
// continue ;
28285: GO 28257
// if GetDistUnitXY ( scout , 31 , 2 ) > 3 then
28287: LD_EXP 14
28291: PPUSH
28292: LD_INT 31
28294: PPUSH
28295: LD_INT 2
28297: PPUSH
28298: CALL_OW 297
28302: PUSH
28303: LD_INT 3
28305: GREATER
28306: IFFALSE 28325
// ComMoveXY ( scout , 31 , 2 ) else
28308: LD_EXP 14
28312: PPUSH
28313: LD_INT 31
28315: PPUSH
28316: LD_INT 2
28318: PPUSH
28319: CALL_OW 111
28323: GO 28334
// RemoveUnit ( scout ) ;
28325: LD_EXP 14
28329: PPUSH
28330: CALL_OW 64
// until false ;
28334: LD_INT 0
28336: IFFALSE 28257
// end ;
28338: END
// every 0 0$1 + 0 0$0.4 do var i , un ; var cutoff_time ;
28339: GO 28341
28341: DISABLE
28342: LD_INT 0
28344: PPUSH
28345: PPUSH
28346: PPUSH
// begin repeat wait ( 0 0$1 ) ;
28347: LD_INT 35
28349: PPUSH
28350: CALL_OW 67
// if russians_surrender then
28354: LD_EXP 76
28358: IFFALSE 28362
// exit ;
28360: GO 29292
// until traitors_answer > 0 ;
28362: LD_EXP 70
28366: PUSH
28367: LD_INT 0
28369: GREATER
28370: IFFALSE 28347
// i = Rand ( 2 2$0 , 3 3$0 ) ;
28372: LD_ADDR_VAR 0 1
28376: PUSH
28377: LD_INT 4200
28379: PPUSH
28380: LD_INT 6300
28382: PPUSH
28383: CALL_OW 12
28387: ST_TO_ADDR
// cutoff_time = 0 0$0 ;
28388: LD_ADDR_VAR 0 3
28392: PUSH
28393: LD_INT 0
28395: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
28396: LD_INT 35
28398: PPUSH
28399: CALL_OW 67
// if russians_surrender then
28403: LD_EXP 76
28407: IFFALSE 28411
// exit ;
28409: GO 29292
// i = i - 0 0$1 ;
28411: LD_ADDR_VAR 0 1
28415: PUSH
28416: LD_VAR 0 1
28420: PUSH
28421: LD_INT 35
28423: MINUS
28424: ST_TO_ADDR
// cutoff_time = cutoff_time + 0 0$1 ;
28425: LD_ADDR_VAR 0 3
28429: PUSH
28430: LD_VAR 0 3
28434: PUSH
28435: LD_INT 35
28437: PLUS
28438: ST_TO_ADDR
// until i <= 0 0$0 or gossudarov_escape_status >= 1 ;
28439: LD_VAR 0 1
28443: PUSH
28444: LD_INT 0
28446: LESSEQUAL
28447: PUSH
28448: LD_EXP 88
28452: PUSH
28453: LD_INT 1
28455: GREATEREQUAL
28456: OR
28457: IFFALSE 28396
// while ContactTime ( [ you , russians ] ) <= 0 0$10 and gossudarov_escape_status < 1 do
28459: LD_EXP 2
28463: PUSH
28464: LD_EXP 3
28468: PUSH
28469: EMPTY
28470: LIST
28471: LIST
28472: PPUSH
28473: CALL_OW 462
28477: PUSH
28478: LD_INT 350
28480: LESSEQUAL
28481: PUSH
28482: LD_EXP 88
28486: PUSH
28487: LD_INT 1
28489: LESS
28490: AND
28491: IFFALSE 28524
// begin wait ( 0 0$2 ) ;
28493: LD_INT 70
28495: PPUSH
28496: CALL_OW 67
// if russians_surrender then
28500: LD_EXP 76
28504: IFFALSE 28508
// exit ;
28506: GO 29292
// cutoff_time = cutoff_time + 0 0$2 ;
28508: LD_ADDR_VAR 0 3
28512: PUSH
28513: LD_VAR 0 3
28517: PUSH
28518: LD_INT 70
28520: PLUS
28521: ST_TO_ADDR
// end ;
28522: GO 28459
// if russians_surrender then
28524: LD_EXP 76
28528: IFFALSE 28532
// exit ;
28530: GO 29292
// DialogueOn ;
28532: CALL_OW 6
// SayRadio ( Gensher , D4-Ge-1 ) ;
28536: LD_EXP 12
28540: PPUSH
28541: LD_STRING D4-Ge-1
28543: PPUSH
28544: CALL_OW 94
// Say ( Dwayne , D4-Dw-1 ) ;
28548: LD_EXP 8
28552: PPUSH
28553: LD_STRING D4-Dw-1
28555: PPUSH
28556: CALL_OW 88
// Say ( Heike , D4-H-1 ) ;
28560: LD_EXP 7
28564: PPUSH
28565: LD_STRING D4-H-1
28567: PPUSH
28568: CALL_OW 88
// SayRadio ( Gensher , D4-Ge-2 ) ;
28572: LD_EXP 12
28576: PPUSH
28577: LD_STRING D4-Ge-2
28579: PPUSH
28580: CALL_OW 94
// Say ( Dwayne , D4-Dw-2 ) ;
28584: LD_EXP 8
28588: PPUSH
28589: LD_STRING D4-Dw-2
28591: PPUSH
28592: CALL_OW 88
// SayRadio ( Gensher , D4-Ge-3 ) ;
28596: LD_EXP 12
28600: PPUSH
28601: LD_STRING D4-Ge-3
28603: PPUSH
28604: CALL_OW 94
// dwait ( 0 0$0.3 ) ;
28608: LD_INT 10
28610: PPUSH
28611: CALL_OW 68
// gensher_answer = Query ( QGensherTraitors ) ;
28615: LD_ADDR_EXP 74
28619: PUSH
28620: LD_STRING QGensherTraitors
28622: PPUSH
28623: CALL_OW 97
28627: ST_TO_ADDR
// case gensher_answer of 1 :
28628: LD_EXP 74
28632: PUSH
28633: LD_INT 1
28635: DOUBLE
28636: EQUAL
28637: IFTRUE 28641
28639: GO 28756
28641: POP
// begin if traitors_under_player_control then
28642: LD_EXP 102
28646: IFFALSE 28674
// begin Say ( Heike , D4-1a-H-1 ) ;
28648: LD_EXP 7
28652: PPUSH
28653: LD_STRING D4-1a-H-1
28655: PPUSH
28656: CALL_OW 88
// SayRadio ( Gensher , D4-1a-Ge-1 ) ;
28660: LD_EXP 12
28664: PPUSH
28665: LD_STRING D4-1a-Ge-1
28667: PPUSH
28668: CALL_OW 94
// end else
28672: GO 28754
// if AnyTraitorAlive then
28674: CALL 29295 0 0
28678: IFFALSE 28730
// begin Say ( Heike , D4-1b-H-1 ) ;
28680: LD_EXP 7
28684: PPUSH
28685: LD_STRING D4-1b-H-1
28687: PPUSH
28688: CALL_OW 88
// SayRadio ( Gensher , D4-1b-Ge-1 ) ;
28692: LD_EXP 12
28696: PPUSH
28697: LD_STRING D4-1b-Ge-1
28699: PPUSH
28700: CALL_OW 94
// Say ( Heike , D4-1b-H-2 ) ;
28704: LD_EXP 7
28708: PPUSH
28709: LD_STRING D4-1b-H-2
28711: PPUSH
28712: CALL_OW 88
// SayRadio ( Gensher , D4-1b-Ge-2 ) ;
28716: LD_EXP 12
28720: PPUSH
28721: LD_STRING D4-1b-Ge-2
28723: PPUSH
28724: CALL_OW 94
// end else
28728: GO 28754
// begin Say ( Heike , D4-1c-H-1 ) ;
28730: LD_EXP 7
28734: PPUSH
28735: LD_STRING D4-1c-H-1
28737: PPUSH
28738: CALL_OW 88
// SayRadio ( Gensher , D4-1c-Ge-1 ) ;
28742: LD_EXP 12
28746: PPUSH
28747: LD_STRING D4-1c-Ge-1
28749: PPUSH
28750: CALL_OW 94
// end ; end ; 2 :
28754: GO 28792
28756: LD_INT 2
28758: DOUBLE
28759: EQUAL
28760: IFTRUE 28764
28762: GO 28791
28764: POP
// begin Say ( Heike , D4-2-H-1 ) ;
28765: LD_EXP 7
28769: PPUSH
28770: LD_STRING D4-2-H-1
28772: PPUSH
28773: CALL_OW 88
// SayRadio ( Gensher , D4-2-Ge-1 ) ;
28777: LD_EXP 12
28781: PPUSH
28782: LD_STRING D4-2-Ge-1
28784: PPUSH
28785: CALL_OW 94
// end ; end ;
28789: GO 28792
28791: POP
// dwait ( 0 0$0.3 ) ;
28792: LD_INT 10
28794: PPUSH
28795: CALL_OW 68
// case Query ( QGensherReinforcements ) of 1 :
28799: LD_STRING QGensherReinforcements
28801: PPUSH
28802: CALL_OW 97
28806: PUSH
28807: LD_INT 1
28809: DOUBLE
28810: EQUAL
28811: IFTRUE 28815
28813: GO 28938
28815: POP
// begin Say ( Heike , D4-x1-H-1 ) ;
28816: LD_EXP 7
28820: PPUSH
28821: LD_STRING D4-x1-H-1
28823: PPUSH
28824: CALL_OW 88
// case gensher_answer of 1 :
28828: LD_EXP 74
28832: PUSH
28833: LD_INT 1
28835: DOUBLE
28836: EQUAL
28837: IFTRUE 28841
28839: GO 28912
28841: POP
// begin if AnyTraitorAlive then
28842: CALL 29295 0 0
28846: IFFALSE 28862
// SayRadio ( Gensher , D4-x1a-Ge-1 ) else
28848: LD_EXP 12
28852: PPUSH
28853: LD_STRING D4-x1a-Ge-1
28855: PPUSH
28856: CALL_OW 94
28860: GO 28874
// SayRadio ( Gensher , D4-x1c-Ge-1 ) ;
28862: LD_EXP 12
28866: PPUSH
28867: LD_STRING D4-x1c-Ge-1
28869: PPUSH
28870: CALL_OW 94
// Say ( Heike , D4-x1a-H-1 ) ;
28874: LD_EXP 7
28878: PPUSH
28879: LD_STRING D4-x1a-H-1
28881: PPUSH
28882: CALL_OW 88
// gensher_reinforcements = true ;
28886: LD_ADDR_EXP 75
28890: PUSH
28891: LD_INT 1
28893: ST_TO_ADDR
// max_player_attack_time = max_player_attack_time + cutoff_time ;
28894: LD_ADDR_EXP 77
28898: PUSH
28899: LD_EXP 77
28903: PUSH
28904: LD_VAR 0 3
28908: PLUS
28909: ST_TO_ADDR
// end ; 2 :
28910: GO 28936
28912: LD_INT 2
28914: DOUBLE
28915: EQUAL
28916: IFTRUE 28920
28918: GO 28935
28920: POP
// begin SayRadio ( Gensher , D4-x1b-Ge-1 ) ;
28921: LD_EXP 12
28925: PPUSH
28926: LD_STRING D4-x1b-Ge-1
28928: PPUSH
28929: CALL_OW 94
// end ; end ;
28933: GO 28936
28935: POP
// end ; 2 :
28936: GO 28962
28938: LD_INT 2
28940: DOUBLE
28941: EQUAL
28942: IFTRUE 28946
28944: GO 28961
28946: POP
// begin Say ( Heike , D4-x2-H-1 ) ;
28947: LD_EXP 7
28951: PPUSH
28952: LD_STRING D4-x2-H-1
28954: PPUSH
28955: CALL_OW 88
// end ; end ;
28959: GO 28962
28961: POP
// DialogueOff ;
28962: CALL_OW 7
// if gensher_answer = 2 then
28966: LD_EXP 74
28970: PUSH
28971: LD_INT 2
28973: EQUAL
28974: IFFALSE 28978
// exit ;
28976: GO 29292
// case traitors_answer of 1 :
28978: LD_EXP 70
28982: PUSH
28983: LD_INT 1
28985: DOUBLE
28986: EQUAL
28987: IFTRUE 28991
28989: GO 29224
28991: POP
// begin wait ( Rand ( 1 1$0 , 1 1$30 ) ) ;
28992: LD_INT 2100
28994: PPUSH
28995: LD_INT 3150
28997: PPUSH
28998: CALL_OW 12
29002: PPUSH
29003: CALL_OW 67
// if not traitors_under_player_control then
29007: LD_EXP 102
29011: NOT
29012: IFFALSE 29016
// exit ;
29014: GO 29292
// DialogueOn ;
29016: CALL_OW 6
// SayRadio ( scout , D4-1a-ScoutM-1 ) ;
29020: LD_EXP 14
29024: PPUSH
29025: LD_STRING D4-1a-ScoutM-1
29027: PPUSH
29028: CALL_OW 94
// if not traitors_leader_is_substitute then
29032: LD_EXP 67
29036: NOT
29037: IFFALSE 29053
// Say ( traitors_leader , D4-1a-Go-1 ) else
29039: LD_EXP 15
29043: PPUSH
29044: LD_STRING D4-1a-Go-1
29046: PPUSH
29047: CALL_OW 88
29051: GO 29065
// Say ( traitors_leader , D4-1a-TLeader-1 ) ;
29053: LD_EXP 15
29057: PPUSH
29058: LD_STRING D4-1a-TLeader-1
29060: PPUSH
29061: CALL_OW 88
// DialogueOff ;
29065: CALL_OW 7
// traitors_pullback = true ;
29069: LD_ADDR_EXP 72
29073: PUSH
29074: LD_INT 1
29076: ST_TO_ADDR
// scout_pullback = true ;
29077: LD_ADDR_EXP 71
29081: PUSH
29082: LD_INT 1
29084: ST_TO_ADDR
// starting_humans = starting_humans diff original_traitors_humans ;
29085: LD_ADDR_EXP 85
29089: PUSH
29090: LD_EXP 85
29094: PUSH
29095: LD_EXP 73
29099: DIFF
29100: ST_TO_ADDR
// activate_traitor_mines = true ;
29101: LD_ADDR_EXP 100
29105: PUSH
29106: LD_INT 1
29108: ST_TO_ADDR
// traitors_under_player_control = false ;
29109: LD_ADDR_EXP 102
29113: PUSH
29114: LD_INT 0
29116: ST_TO_ADDR
// for i in traitors_humans do
29117: LD_ADDR_VAR 0 1
29121: PUSH
29122: LD_EXP 68
29126: PUSH
29127: FOR_IN
29128: IFFALSE 29200
// begin SetSide ( i , you_alt ) ;
29130: LD_VAR 0 1
29134: PPUSH
29135: LD_EXP 5
29139: PPUSH
29140: CALL_OW 235
// un = IsInUnit ( i ) ;
29144: LD_ADDR_VAR 0 2
29148: PUSH
29149: LD_VAR 0 1
29153: PPUSH
29154: CALL_OW 310
29158: ST_TO_ADDR
// if un > 0 and GetType ( un ) = unit_vehicle then
29159: LD_VAR 0 2
29163: PUSH
29164: LD_INT 0
29166: GREATER
29167: PUSH
29168: LD_VAR 0 2
29172: PPUSH
29173: CALL_OW 247
29177: PUSH
29178: LD_INT 2
29180: EQUAL
29181: AND
29182: IFFALSE 29198
// SetSide ( un , you_alt ) ;
29184: LD_VAR 0 2
29188: PPUSH
29189: LD_EXP 5
29193: PPUSH
29194: CALL_OW 235
// end ;
29198: GO 29127
29200: POP
29201: POP
// SetAttitude ( you , you_alt , att_neutral , true ) ;
29202: LD_EXP 2
29206: PPUSH
29207: LD_EXP 5
29211: PPUSH
29212: LD_INT 0
29214: PPUSH
29215: LD_INT 1
29217: PPUSH
29218: CALL_OW 80
// end ; 2 :
29222: GO 29292
29224: LD_INT 2
29226: DOUBLE
29227: EQUAL
29228: IFTRUE 29232
29230: GO 29291
29232: POP
// begin wait ( Rand ( 3 3$0 , 4 4$0 ) ) ;
29233: LD_INT 6300
29235: PPUSH
29236: LD_INT 8400
29238: PPUSH
29239: CALL_OW 12
29243: PPUSH
29244: CALL_OW 67
// DialogueOn ;
29248: CALL_OW 6
// if not traitors_leader_is_substitute then
29252: LD_EXP 67
29256: NOT
29257: IFFALSE 29273
// SayRadio ( traitors_leader , D4-1b-Go-1 ) else
29259: LD_EXP 15
29263: PPUSH
29264: LD_STRING D4-1b-Go-1
29266: PPUSH
29267: CALL_OW 94
29271: GO 29285
// SayRadio ( traitors_leader , D4-1b-TLeader-1 ) ;
29273: LD_EXP 15
29277: PPUSH
29278: LD_STRING D4-1b-TLeader-1
29280: PPUSH
29281: CALL_OW 94
// DialogueOff ;
29285: CALL_OW 7
// end ; end ;
29289: GO 29292
29291: POP
// end ;
29292: PPOPN 3
29294: END
// function AnyTraitorAlive ; var i ; begin
29295: LD_INT 0
29297: PPUSH
29298: PPUSH
// for i in original_traitors_humans do
29299: LD_ADDR_VAR 0 2
29303: PUSH
29304: LD_EXP 73
29308: PUSH
29309: FOR_IN
29310: IFFALSE 29341
// if GetLives ( i ) > 0 then
29312: LD_VAR 0 2
29316: PPUSH
29317: CALL_OW 256
29321: PUSH
29322: LD_INT 0
29324: GREATER
29325: IFFALSE 29339
// begin result = true ;
29327: LD_ADDR_VAR 0 1
29331: PUSH
29332: LD_INT 1
29334: ST_TO_ADDR
// exit ;
29335: POP
29336: POP
29337: GO 29351
// end ;
29339: GO 29309
29341: POP
29342: POP
// result = false ;
29343: LD_ADDR_VAR 0 1
29347: PUSH
29348: LD_INT 0
29350: ST_TO_ADDR
// end ;
29351: LD_VAR 0 1
29355: RET
// every 0 0$1 + 0 0$0.3 do var temp_list , i , un , temp_list_2 ; var mine_dialogue , mine_dialogue_speaker , mine_dialogue_hex ;
29356: GO 29358
29358: DISABLE
29359: LD_INT 0
29361: PPUSH
29362: PPUSH
29363: PPUSH
29364: PPUSH
29365: PPUSH
29366: PPUSH
29367: PPUSH
// begin mine_dialogue = 0 ;
29368: LD_ADDR_VAR 0 5
29372: PUSH
29373: LD_INT 0
29375: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
29376: LD_INT 35
29378: PPUSH
29379: CALL_OW 67
// until activate_traitor_mines ;
29383: LD_EXP 100
29387: IFFALSE 29376
// repeat wait ( 0 0$0.5 ) ;
29389: LD_INT 18
29391: PPUSH
29392: CALL_OW 67
// if mine_dialogue = 1 then
29396: LD_VAR 0 5
29400: PUSH
29401: LD_INT 1
29403: EQUAL
29404: IFFALSE 29676
// begin mine_dialogue = 2 ;
29406: LD_ADDR_VAR 0 5
29410: PUSH
29411: LD_INT 2
29413: ST_TO_ADDR
// CenterOnXY ( mine_dialogue_hex [ 1 ] , mine_dialogue_hex [ 2 ] ) ;
29414: LD_VAR 0 7
29418: PUSH
29419: LD_INT 1
29421: ARRAY
29422: PPUSH
29423: LD_VAR 0 7
29427: PUSH
29428: LD_INT 2
29430: ARRAY
29431: PPUSH
29432: CALL_OW 84
// DialogueOn ;
29436: CALL_OW 6
// if mine_dialogue_speaker > 0 then
29440: LD_VAR 0 6
29444: PUSH
29445: LD_INT 0
29447: GREATER
29448: IFFALSE 29639
// case mine_dialogue_speaker of Heike :
29450: LD_VAR 0 6
29454: PUSH
29455: LD_EXP 7
29459: DOUBLE
29460: EQUAL
29461: IFTRUE 29465
29463: GO 29480
29465: POP
// ForceSay ( Heike , D11-H-1 ) ; Oswald :
29466: LD_EXP 7
29470: PPUSH
29471: LD_STRING D11-H-1
29473: PPUSH
29474: CALL_OW 91
29478: GO 29639
29480: LD_EXP 9
29484: DOUBLE
29485: EQUAL
29486: IFTRUE 29490
29488: GO 29526
29490: POP
// begin if not oswald_is_substitute then
29491: LD_EXP 62
29495: NOT
29496: IFFALSE 29512
// ForceSay ( Oswald , D11-Os-1 ) else
29498: LD_EXP 9
29502: PPUSH
29503: LD_STRING D11-Os-1
29505: PPUSH
29506: CALL_OW 91
29510: GO 29524
// ForceSay ( Oswald , D11-Os_sub-1 ) ;
29512: LD_EXP 9
29516: PPUSH
29517: LD_STRING D11-Os_sub-1
29519: PPUSH
29520: CALL_OW 91
// end ; Dwayne :
29524: GO 29639
29526: LD_EXP 8
29530: DOUBLE
29531: EQUAL
29532: IFTRUE 29536
29534: GO 29551
29536: POP
// ForceSay ( Dwayne , D11-Dw-1 ) ; Kurt :
29537: LD_EXP 8
29541: PPUSH
29542: LD_STRING D11-Dw-1
29544: PPUSH
29545: CALL_OW 91
29549: GO 29639
29551: LD_EXP 10
29555: DOUBLE
29556: EQUAL
29557: IFTRUE 29561
29559: GO 29597
29561: POP
// begin if not kurt_is_substitute then
29562: LD_EXP 63
29566: NOT
29567: IFFALSE 29583
// ForceSay ( Kurt , D11-Ku-1 ) else
29569: LD_EXP 10
29573: PPUSH
29574: LD_STRING D11-Ku-1
29576: PPUSH
29577: CALL_OW 91
29581: GO 29595
// ForceSay ( Kurt , D11-Ku_sub-1 ) ;
29583: LD_EXP 10
29587: PPUSH
29588: LD_STRING D11-Ku_sub-1
29590: PPUSH
29591: CALL_OW 91
// end ; else
29595: GO 29639
29597: POP
// if GetSex ( mine_dialogue_speaker ) = sex_male then
29598: LD_VAR 0 6
29602: PPUSH
29603: CALL_OW 258
29607: PUSH
29608: LD_INT 1
29610: EQUAL
29611: IFFALSE 29627
// ForceSay ( mine_dialogue_speaker , D11-SomeM-1 ) else
29613: LD_VAR 0 6
29617: PPUSH
29618: LD_STRING D11-SomeM-1
29620: PPUSH
29621: CALL_OW 91
29625: GO 29639
// ForceSay ( mine_dialogue_speaker , D11-SomeF-1 ) ; end ;
29627: LD_VAR 0 6
29631: PPUSH
29632: LD_STRING D11-SomeF-1
29634: PPUSH
29635: CALL_OW 91
// if not traitors_leader_is_substitute then
29639: LD_EXP 67
29643: NOT
29644: IFFALSE 29660
// ForceSay ( Heike , D11-H-1a ) else
29646: LD_EXP 7
29650: PPUSH
29651: LD_STRING D11-H-1a
29653: PPUSH
29654: CALL_OW 91
29658: GO 29672
// ForceSay ( Heike , D11-H-1b ) ;
29660: LD_EXP 7
29664: PPUSH
29665: LD_STRING D11-H-1b
29667: PPUSH
29668: CALL_OW 91
// DialogueOff ;
29672: CALL_OW 7
// end ; temp_list = FilterAllUnits ( [ f_side , you ] ) ;
29676: LD_ADDR_VAR 0 1
29680: PUSH
29681: LD_INT 22
29683: PUSH
29684: LD_EXP 2
29688: PUSH
29689: EMPTY
29690: LIST
29691: LIST
29692: PPUSH
29693: CALL_OW 69
29697: ST_TO_ADDR
// i = 1 ;
29698: LD_ADDR_VAR 0 2
29702: PUSH
29703: LD_INT 1
29705: ST_TO_ADDR
// while i <= mines_hexes do
29706: LD_VAR 0 2
29710: PUSH
29711: LD_EXP 99
29715: LESSEQUAL
29716: IFFALSE 30065
// begin un = HexInfo ( mines_hexes [ i ] [ 1 ] , mines_hexes [ i ] [ 2 ] ) ;
29718: LD_ADDR_VAR 0 3
29722: PUSH
29723: LD_EXP 99
29727: PUSH
29728: LD_VAR 0 2
29732: ARRAY
29733: PUSH
29734: LD_INT 1
29736: ARRAY
29737: PPUSH
29738: LD_EXP 99
29742: PUSH
29743: LD_VAR 0 2
29747: ARRAY
29748: PUSH
29749: LD_INT 2
29751: ARRAY
29752: PPUSH
29753: CALL_OW 428
29757: ST_TO_ADDR
// if un in temp_list then
29758: LD_VAR 0 3
29762: PUSH
29763: LD_VAR 0 1
29767: IN
29768: IFFALSE 30049
// begin LaunchMineAtPos ( mines_hexes [ i ] [ 1 ] , mines_hexes [ i ] [ 2 ] , you_alt ) ;
29770: LD_EXP 99
29774: PUSH
29775: LD_VAR 0 2
29779: ARRAY
29780: PUSH
29781: LD_INT 1
29783: ARRAY
29784: PPUSH
29785: LD_EXP 99
29789: PUSH
29790: LD_VAR 0 2
29794: ARRAY
29795: PUSH
29796: LD_INT 2
29798: ARRAY
29799: PPUSH
29800: LD_EXP 5
29804: PPUSH
29805: CALL_OW 456
// if mine_dialogue = 0 then
29809: LD_VAR 0 5
29813: PUSH
29814: LD_INT 0
29816: EQUAL
29817: IFFALSE 30027
// begin mine_dialogue = 1 ;
29819: LD_ADDR_VAR 0 5
29823: PUSH
29824: LD_INT 1
29826: ST_TO_ADDR
// mine_dialogue_hex = mines_hexes [ i ] ;
29827: LD_ADDR_VAR 0 7
29831: PUSH
29832: LD_EXP 99
29836: PUSH
29837: LD_VAR 0 2
29841: ARRAY
29842: ST_TO_ADDR
// if GetType ( un ) = unit_human then
29843: LD_VAR 0 3
29847: PPUSH
29848: CALL_OW 247
29852: PUSH
29853: LD_INT 1
29855: EQUAL
29856: IFFALSE 29911
// begin if not GetClass ( un ) in [ class_apeman , class_apeman_engineer , class_apeman_soldier , class_apeman_kamikaze ] then
29858: LD_VAR 0 3
29862: PPUSH
29863: CALL_OW 257
29867: PUSH
29868: LD_INT 12
29870: PUSH
29871: LD_INT 16
29873: PUSH
29874: LD_INT 15
29876: PUSH
29877: LD_INT 17
29879: PUSH
29880: EMPTY
29881: LIST
29882: LIST
29883: LIST
29884: LIST
29885: IN
29886: NOT
29887: IFFALSE 29901
// mine_dialogue_speaker = un else
29889: LD_ADDR_VAR 0 6
29893: PUSH
29894: LD_VAR 0 3
29898: ST_TO_ADDR
29899: GO 29909
// mine_dialogue_speaker = 0 ;
29901: LD_ADDR_VAR 0 6
29905: PUSH
29906: LD_INT 0
29908: ST_TO_ADDR
// end else
29909: GO 30027
// case GetControl ( un ) of control_manual :
29911: LD_VAR 0 3
29915: PPUSH
29916: CALL_OW 263
29920: PUSH
29921: LD_INT 1
29923: DOUBLE
29924: EQUAL
29925: IFTRUE 29929
29927: GO 29981
29929: POP
// begin temp_list_2 = UnitsInside ( un ) ;
29930: LD_ADDR_VAR 0 4
29934: PUSH
29935: LD_VAR 0 3
29939: PPUSH
29940: CALL_OW 313
29944: ST_TO_ADDR
// if temp_list_2 > 0 then
29945: LD_VAR 0 4
29949: PUSH
29950: LD_INT 0
29952: GREATER
29953: IFFALSE 29971
// mine_dialogue_speaker = temp_list_2 [ 1 ] else
29955: LD_ADDR_VAR 0 6
29959: PUSH
29960: LD_VAR 0 4
29964: PUSH
29965: LD_INT 1
29967: ARRAY
29968: ST_TO_ADDR
29969: GO 29979
// mine_dialogue_speaker = 0 ;
29971: LD_ADDR_VAR 0 6
29975: PUSH
29976: LD_INT 0
29978: ST_TO_ADDR
// end ; control_remote :
29979: GO 30027
29981: LD_INT 2
29983: DOUBLE
29984: EQUAL
29985: IFTRUE 29989
29987: GO 30007
29989: POP
// begin mine_dialogue_speaker = IsControledBy ( un ) ;
29990: LD_ADDR_VAR 0 6
29994: PUSH
29995: LD_VAR 0 3
29999: PPUSH
30000: CALL_OW 312
30004: ST_TO_ADDR
// end ; control_apeman :
30005: GO 30027
30007: LD_INT 5
30009: DOUBLE
30010: EQUAL
30011: IFTRUE 30015
30013: GO 30026
30015: POP
// begin mine_dialogue_speaker = 0 ;
30016: LD_ADDR_VAR 0 6
30020: PUSH
30021: LD_INT 0
30023: ST_TO_ADDR
// end ; end ;
30024: GO 30027
30026: POP
// end ; mines_hexes = Delete ( mines_hexes , i ) ;
30027: LD_ADDR_EXP 99
30031: PUSH
30032: LD_EXP 99
30036: PPUSH
30037: LD_VAR 0 2
30041: PPUSH
30042: CALL_OW 3
30046: ST_TO_ADDR
// continue ;
30047: GO 29706
// end ; i = i + 1 ;
30049: LD_ADDR_VAR 0 2
30053: PUSH
30054: LD_VAR 0 2
30058: PUSH
30059: LD_INT 1
30061: PLUS
30062: ST_TO_ADDR
// end ;
30063: GO 29706
// until mines_hexes = 0 ;
30065: LD_EXP 99
30069: PUSH
30070: LD_INT 0
30072: EQUAL
30073: IFFALSE 29389
// end ;
30075: PPOPN 7
30077: END
// every 0 0$1 + 0 0$0.9 do var humans_list , vehicles_list , num , i , val , bonus ;
30078: GO 30080
30080: DISABLE
30081: LD_INT 0
30083: PPUSH
30084: PPUSH
30085: PPUSH
30086: PPUSH
30087: PPUSH
30088: PPUSH
// begin repeat wait ( 0 0$1 ) ;
30089: LD_INT 35
30091: PPUSH
30092: CALL_OW 67
// until gensher_reinforcements ;
30096: LD_EXP 75
30100: IFFALSE 30089
// wait ( Rand ( 2 2$0 , 2 2$30 ) ) ;
30102: LD_INT 4200
30104: PPUSH
30105: LD_INT 5250
30107: PPUSH
30108: CALL_OW 12
30112: PPUSH
30113: CALL_OW 67
// if AnyTraitorAlive then
30117: CALL 29295 0 0
30121: IFFALSE 30133
// bonus = 0 else
30123: LD_ADDR_VAR 0 6
30127: PUSH
30128: LD_INT 0
30130: ST_TO_ADDR
30131: GO 30141
// bonus = 1 ;
30133: LD_ADDR_VAR 0 6
30137: PUSH
30138: LD_INT 1
30140: ST_TO_ADDR
// humans_list = [ ] ;
30141: LD_ADDR_VAR 0 1
30145: PUSH
30146: EMPTY
30147: ST_TO_ADDR
// vehicles_list = [ ] ;
30148: LD_ADDR_VAR 0 2
30152: PUSH
30153: EMPTY
30154: ST_TO_ADDR
// original_genshers_reinforcements = [ ] ;
30155: LD_ADDR_EXP 86
30159: PUSH
30160: EMPTY
30161: ST_TO_ADDR
// InitUc ;
30162: CALL_OW 18
// InitHc ;
30166: CALL_OW 19
// InitVc ;
30170: CALL_OW 20
// uc_nation = nation_arabian ;
30174: LD_ADDR_OWVAR 21
30178: PUSH
30179: LD_INT 2
30181: ST_TO_ADDR
// uc_side = you ;
30182: LD_ADDR_OWVAR 20
30186: PUSH
30187: LD_EXP 2
30191: ST_TO_ADDR
// vc_control = control_manual ;
30192: LD_ADDR_OWVAR 38
30196: PUSH
30197: LD_INT 1
30199: ST_TO_ADDR
// vc_engine = engine_combustion ;
30200: LD_ADDR_OWVAR 39
30204: PUSH
30205: LD_INT 1
30207: ST_TO_ADDR
// vc_chassis = ar_half_tracked ;
30208: LD_ADDR_OWVAR 37
30212: PUSH
30213: LD_INT 14
30215: ST_TO_ADDR
// num = 0 ;
30216: LD_ADDR_VAR 0 3
30220: PUSH
30221: LD_INT 0
30223: ST_TO_ADDR
// for i = 1 to [ 5 , 4 , 3 ] [ difficulty ] + bonus do
30224: LD_ADDR_VAR 0 4
30228: PUSH
30229: DOUBLE
30230: LD_INT 1
30232: DEC
30233: ST_TO_ADDR
30234: LD_INT 5
30236: PUSH
30237: LD_INT 4
30239: PUSH
30240: LD_INT 3
30242: PUSH
30243: EMPTY
30244: LIST
30245: LIST
30246: LIST
30247: PUSH
30248: LD_OWVAR 67
30252: ARRAY
30253: PUSH
30254: LD_VAR 0 6
30258: PLUS
30259: PUSH
30260: FOR_TO
30261: IFFALSE 30443
// begin uc_direction = Rand ( 0 , 5 ) ;
30263: LD_ADDR_OWVAR 24
30267: PUSH
30268: LD_INT 0
30270: PPUSH
30271: LD_INT 5
30273: PPUSH
30274: CALL_OW 12
30278: ST_TO_ADDR
// if i = 1 then
30279: LD_VAR 0 4
30283: PUSH
30284: LD_INT 1
30286: EQUAL
30287: IFFALSE 30299
// vc_weapon = ar_rocket_launcher else
30289: LD_ADDR_OWVAR 40
30293: PUSH
30294: LD_INT 28
30296: ST_TO_ADDR
30297: GO 30425
// if num = 1 or Rand ( 1 , 2 ) <= 1 then
30299: LD_VAR 0 3
30303: PUSH
30304: LD_INT 1
30306: EQUAL
30307: PUSH
30308: LD_INT 1
30310: PPUSH
30311: LD_INT 2
30313: PPUSH
30314: CALL_OW 12
30318: PUSH
30319: LD_INT 1
30321: LESSEQUAL
30322: OR
30323: IFFALSE 30361
// begin if Rand ( 1 , 2 ) = 1 then
30325: LD_INT 1
30327: PPUSH
30328: LD_INT 2
30330: PPUSH
30331: CALL_OW 12
30335: PUSH
30336: LD_INT 1
30338: EQUAL
30339: IFFALSE 30351
// vc_weapon = ar_gun else
30341: LD_ADDR_OWVAR 40
30345: PUSH
30346: LD_INT 27
30348: ST_TO_ADDR
30349: GO 30359
// vc_weapon = ar_rocket_launcher ;
30351: LD_ADDR_OWVAR 40
30355: PUSH
30356: LD_INT 28
30358: ST_TO_ADDR
// end else
30359: GO 30425
// begin num = num + 1 ;
30361: LD_ADDR_VAR 0 3
30365: PUSH
30366: LD_VAR 0 3
30370: PUSH
30371: LD_INT 1
30373: PLUS
30374: ST_TO_ADDR
// if difficulty > 1 and Rand ( 1 , 5 - difficulty ) = 1 then
30375: LD_OWVAR 67
30379: PUSH
30380: LD_INT 1
30382: GREATER
30383: PUSH
30384: LD_INT 1
30386: PPUSH
30387: LD_INT 5
30389: PUSH
30390: LD_OWVAR 67
30394: MINUS
30395: PPUSH
30396: CALL_OW 12
30400: PUSH
30401: LD_INT 1
30403: EQUAL
30404: AND
30405: IFFALSE 30417
// vc_weapon = ar_double_machine_gun else
30407: LD_ADDR_OWVAR 40
30411: PUSH
30412: LD_INT 24
30414: ST_TO_ADDR
30415: GO 30425
// vc_weapon = ar_gatling_gun ;
30417: LD_ADDR_OWVAR 40
30421: PUSH
30422: LD_INT 25
30424: ST_TO_ADDR
// end ; vehicles_list = vehicles_list ^ CreateVehicle ;
30425: LD_ADDR_VAR 0 2
30429: PUSH
30430: LD_VAR 0 2
30434: PUSH
30435: CALL_OW 45
30439: ADD
30440: ST_TO_ADDR
// end ;
30441: GO 30260
30443: POP
30444: POP
// for i = 1 to 2 + bonus do
30445: LD_ADDR_VAR 0 4
30449: PUSH
30450: DOUBLE
30451: LD_INT 1
30453: DEC
30454: ST_TO_ADDR
30455: LD_INT 2
30457: PUSH
30458: LD_VAR 0 6
30462: PLUS
30463: PUSH
30464: FOR_TO
30465: IFFALSE 30521
// begin PrepareScientist ( false , 6 ) ;
30467: LD_INT 0
30469: PPUSH
30470: LD_INT 6
30472: PPUSH
30473: CALL_OW 384
// num = CreateHuman ;
30477: LD_ADDR_VAR 0 3
30481: PUSH
30482: CALL_OW 44
30486: ST_TO_ADDR
// humans_list = humans_list ^ num ;
30487: LD_ADDR_VAR 0 1
30491: PUSH
30492: LD_VAR 0 1
30496: PUSH
30497: LD_VAR 0 3
30501: ADD
30502: ST_TO_ADDR
// original_genshers_reinforcements = original_genshers_reinforcements ^ num ;
30503: LD_ADDR_EXP 86
30507: PUSH
30508: LD_EXP 86
30512: PUSH
30513: LD_VAR 0 3
30517: ADD
30518: ST_TO_ADDR
// end ;
30519: GO 30464
30521: POP
30522: POP
// val = vehicles_list - [ 1 , 2 , 3 ] [ difficulty ] + bonus ;
30523: LD_ADDR_VAR 0 5
30527: PUSH
30528: LD_VAR 0 2
30532: PUSH
30533: LD_INT 1
30535: PUSH
30536: LD_INT 2
30538: PUSH
30539: LD_INT 3
30541: PUSH
30542: EMPTY
30543: LIST
30544: LIST
30545: LIST
30546: PUSH
30547: LD_OWVAR 67
30551: ARRAY
30552: MINUS
30553: PUSH
30554: LD_VAR 0 6
30558: PLUS
30559: ST_TO_ADDR
// for i = 1 to vehicles_list + 0 do
30560: LD_ADDR_VAR 0 4
30564: PUSH
30565: DOUBLE
30566: LD_INT 1
30568: DEC
30569: ST_TO_ADDR
30570: LD_VAR 0 2
30574: PUSH
30575: LD_INT 0
30577: PLUS
30578: PUSH
30579: FOR_TO
30580: IFFALSE 30664
// begin if i < val then
30582: LD_VAR 0 4
30586: PUSH
30587: LD_VAR 0 5
30591: LESS
30592: IFFALSE 30606
// PrepareMechanic ( false , 6 ) else
30594: LD_INT 0
30596: PPUSH
30597: LD_INT 6
30599: PPUSH
30600: CALL_OW 383
30604: GO 30616
// PrepareSoldier ( false , 6 ) ;
30606: LD_INT 0
30608: PPUSH
30609: LD_INT 6
30611: PPUSH
30612: CALL_OW 381
// num = CreateHuman ;
30616: LD_ADDR_VAR 0 3
30620: PUSH
30621: CALL_OW 44
30625: ST_TO_ADDR
// PlaceHumanInUnit ( num , vehicles_list [ i ] ) ;
30626: LD_VAR 0 3
30630: PPUSH
30631: LD_VAR 0 2
30635: PUSH
30636: LD_VAR 0 4
30640: ARRAY
30641: PPUSH
30642: CALL_OW 52
// original_genshers_reinforcements = original_genshers_reinforcements ^ num ;
30646: LD_ADDR_EXP 86
30650: PUSH
30651: LD_EXP 86
30655: PUSH
30656: LD_VAR 0 3
30660: ADD
30661: ST_TO_ADDR
// end ;
30662: GO 30579
30664: POP
30665: POP
// for i = 1 to [ 2 , 1 , 0 ] [ difficulty ] + Rand ( 0 , 1 ) + bonus do
30666: LD_ADDR_VAR 0 4
30670: PUSH
30671: DOUBLE
30672: LD_INT 1
30674: DEC
30675: ST_TO_ADDR
30676: LD_INT 2
30678: PUSH
30679: LD_INT 1
30681: PUSH
30682: LD_INT 0
30684: PUSH
30685: EMPTY
30686: LIST
30687: LIST
30688: LIST
30689: PUSH
30690: LD_OWVAR 67
30694: ARRAY
30695: PUSH
30696: LD_INT 0
30698: PPUSH
30699: LD_INT 1
30701: PPUSH
30702: CALL_OW 12
30706: PLUS
30707: PUSH
30708: LD_VAR 0 6
30712: PLUS
30713: PUSH
30714: FOR_TO
30715: IFFALSE 30771
// begin PrepareSoldier ( false , 6 ) ;
30717: LD_INT 0
30719: PPUSH
30720: LD_INT 6
30722: PPUSH
30723: CALL_OW 381
// num = CreateHuman ;
30727: LD_ADDR_VAR 0 3
30731: PUSH
30732: CALL_OW 44
30736: ST_TO_ADDR
// humans_list = humans_list ^ num ;
30737: LD_ADDR_VAR 0 1
30741: PUSH
30742: LD_VAR 0 1
30746: PUSH
30747: LD_VAR 0 3
30751: ADD
30752: ST_TO_ADDR
// original_genshers_reinforcements = original_genshers_reinforcements ^ num ;
30753: LD_ADDR_EXP 86
30757: PUSH
30758: LD_EXP 86
30762: PUSH
30763: LD_VAR 0 3
30767: ADD
30768: ST_TO_ADDR
// end ;
30769: GO 30714
30771: POP
30772: POP
// starting_humans = starting_humans ^ original_genshers_reinforcements ;
30773: LD_ADDR_EXP 85
30777: PUSH
30778: LD_EXP 85
30782: PUSH
30783: LD_EXP 86
30787: ADD
30788: ST_TO_ADDR
// for i in vehicles_list ^ humans_list do
30789: LD_ADDR_VAR 0 4
30793: PUSH
30794: LD_VAR 0 2
30798: PUSH
30799: LD_VAR 0 1
30803: ADD
30804: PUSH
30805: FOR_IN
30806: IFFALSE 30825
// PlaceUnitArea ( i , gensher_reinforcements_area , false ) ;
30808: LD_VAR 0 4
30812: PPUSH
30813: LD_INT 6
30815: PPUSH
30816: LD_INT 0
30818: PPUSH
30819: CALL_OW 49
30823: GO 30805
30825: POP
30826: POP
// num = humans_list [ 1 ] ;
30827: LD_ADDR_VAR 0 3
30831: PUSH
30832: LD_VAR 0 1
30836: PUSH
30837: LD_INT 1
30839: ARRAY
30840: ST_TO_ADDR
// DialogueOn ;
30841: CALL_OW 6
// if GetSex ( num ) = sex_male then
30845: LD_VAR 0 3
30849: PPUSH
30850: CALL_OW 258
30854: PUSH
30855: LD_INT 1
30857: EQUAL
30858: IFFALSE 30874
// SayRadio ( num , D5-SomeM-1 ) else
30860: LD_VAR 0 3
30864: PPUSH
30865: LD_STRING D5-SomeM-1
30867: PPUSH
30868: CALL_OW 94
30872: GO 30886
// SayRadio ( num , D5-SomeF-1 ) ;
30874: LD_VAR 0 3
30878: PPUSH
30879: LD_STRING D5-SomeF-1
30881: PPUSH
30882: CALL_OW 94
// DialogueOff ;
30886: CALL_OW 7
// end ;
30890: PPOPN 6
30892: END
// every 0 0$1 + 0 0$0.4 do var i , temp_list , x , y , temp_list_2 , temp_list_3 , un , under_attack ; var bunkers_west , bunkers_north , escape_route , hex_index , cargo_bay_pos , driver_front , driver_rear , escape_area , last_seen_tick ; var timer ;
30893: GO 30895
30895: DISABLE
30896: LD_INT 0
30898: PPUSH
30899: PPUSH
30900: PPUSH
30901: PPUSH
30902: PPUSH
30903: PPUSH
30904: PPUSH
30905: PPUSH
30906: PPUSH
30907: PPUSH
30908: PPUSH
30909: PPUSH
30910: PPUSH
30911: PPUSH
30912: PPUSH
30913: PPUSH
30914: PPUSH
30915: PPUSH
// begin bunkers_west = FilterAllUnits ( [ [ f_side , russians ] , [ f_btype , b_bunker ] , [ f_inarea , escape_area_1 ] ] ) ;
30916: LD_ADDR_VAR 0 9
30920: PUSH
30921: LD_INT 22
30923: PUSH
30924: LD_EXP 3
30928: PUSH
30929: EMPTY
30930: LIST
30931: LIST
30932: PUSH
30933: LD_INT 30
30935: PUSH
30936: LD_INT 32
30938: PUSH
30939: EMPTY
30940: LIST
30941: LIST
30942: PUSH
30943: LD_INT 95
30945: PUSH
30946: LD_INT 7
30948: PUSH
30949: EMPTY
30950: LIST
30951: LIST
30952: PUSH
30953: EMPTY
30954: LIST
30955: LIST
30956: LIST
30957: PPUSH
30958: CALL_OW 69
30962: ST_TO_ADDR
// bunkers_north = FilterAllUnits ( [ [ f_side , russians ] , [ f_btype , b_bunker ] , [ f_inarea , escape_area_3 ] ] ) ;
30963: LD_ADDR_VAR 0 10
30967: PUSH
30968: LD_INT 22
30970: PUSH
30971: LD_EXP 3
30975: PUSH
30976: EMPTY
30977: LIST
30978: LIST
30979: PUSH
30980: LD_INT 30
30982: PUSH
30983: LD_INT 32
30985: PUSH
30986: EMPTY
30987: LIST
30988: LIST
30989: PUSH
30990: LD_INT 95
30992: PUSH
30993: LD_INT 9
30995: PUSH
30996: EMPTY
30997: LIST
30998: LIST
30999: PUSH
31000: EMPTY
31001: LIST
31002: LIST
31003: LIST
31004: PPUSH
31005: CALL_OW 69
31009: ST_TO_ADDR
// timer = 0 ;
31010: LD_ADDR_VAR 0 18
31014: PUSH
31015: LD_INT 0
31017: ST_TO_ADDR
// escape_route = [ ] ;
31018: LD_ADDR_VAR 0 11
31022: PUSH
31023: EMPTY
31024: ST_TO_ADDR
// hex_index = 1 ;
31025: LD_ADDR_VAR 0 12
31029: PUSH
31030: LD_INT 1
31032: ST_TO_ADDR
// cargo_bay_pos = [ ] ;
31033: LD_ADDR_VAR 0 13
31037: PUSH
31038: EMPTY
31039: ST_TO_ADDR
// driver_front = 0 ;
31040: LD_ADDR_VAR 0 14
31044: PUSH
31045: LD_INT 0
31047: ST_TO_ADDR
// driver_rear = 0 ;
31048: LD_ADDR_VAR 0 15
31052: PUSH
31053: LD_INT 0
31055: ST_TO_ADDR
// escape_area = 0 ;
31056: LD_ADDR_VAR 0 16
31060: PUSH
31061: LD_INT 0
31063: ST_TO_ADDR
// last_seen_tick = 0 ;
31064: LD_ADDR_VAR 0 17
31068: PUSH
31069: LD_INT 0
31071: ST_TO_ADDR
// repeat wait ( 0 0$0.7 ) ;
31072: LD_INT 24
31074: PPUSH
31075: CALL_OW 67
// until BaseUnderAttack ( 1 , - 1 ) ;
31079: LD_INT 1
31081: PPUSH
31082: LD_INT 1
31084: NEG
31085: PPUSH
31086: CALL 16668 0 2
31090: IFFALSE 31072
// temp_list = ai_scientists [ 1 ] diff Gossudarov ;
31092: LD_ADDR_VAR 0 2
31096: PUSH
31097: LD_EXP 21
31101: PUSH
31102: LD_INT 1
31104: ARRAY
31105: PUSH
31106: LD_EXP 13
31110: DIFF
31111: ST_TO_ADDR
// ai_scientists = Replace ( ai_scientists , 1 , temp_list ) ;
31112: LD_ADDR_EXP 21
31116: PUSH
31117: LD_EXP 21
31121: PPUSH
31122: LD_INT 1
31124: PPUSH
31125: LD_VAR 0 2
31129: PPUSH
31130: CALL_OW 1
31134: ST_TO_ADDR
// if IsLive ( escort_veh_front ) and GetSide ( escort_veh_front ) = russians and ai_mechanics_defend [ 1 ] > 0 then
31135: LD_EXP 91
31139: PPUSH
31140: CALL_OW 300
31144: PUSH
31145: LD_EXP 91
31149: PPUSH
31150: CALL_OW 255
31154: PUSH
31155: LD_EXP 3
31159: EQUAL
31160: AND
31161: PUSH
31162: LD_EXP 19
31166: PUSH
31167: LD_INT 1
31169: ARRAY
31170: PUSH
31171: LD_INT 0
31173: GREATER
31174: AND
31175: IFFALSE 31240
// begin driver_front = ai_mechanics_defend [ 1 ] [ 1 ] ;
31177: LD_ADDR_VAR 0 14
31181: PUSH
31182: LD_EXP 19
31186: PUSH
31187: LD_INT 1
31189: ARRAY
31190: PUSH
31191: LD_INT 1
31193: ARRAY
31194: ST_TO_ADDR
// temp_list = Delete ( ai_mechanics_defend [ 1 ] , 1 ) ;
31195: LD_ADDR_VAR 0 2
31199: PUSH
31200: LD_EXP 19
31204: PUSH
31205: LD_INT 1
31207: ARRAY
31208: PPUSH
31209: LD_INT 1
31211: PPUSH
31212: CALL_OW 3
31216: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , 1 , temp_list ) ;
31217: LD_ADDR_EXP 19
31221: PUSH
31222: LD_EXP 19
31226: PPUSH
31227: LD_INT 1
31229: PPUSH
31230: LD_VAR 0 2
31234: PPUSH
31235: CALL_OW 1
31239: ST_TO_ADDR
// end ; if IsLive ( escort_veh_rear ) and GetSide ( escort_veh_rear ) = russians and ai_mechanics_defend [ 1 ] > 0 then
31240: LD_EXP 92
31244: PPUSH
31245: CALL_OW 300
31249: PUSH
31250: LD_EXP 92
31254: PPUSH
31255: CALL_OW 255
31259: PUSH
31260: LD_EXP 3
31264: EQUAL
31265: AND
31266: PUSH
31267: LD_EXP 19
31271: PUSH
31272: LD_INT 1
31274: ARRAY
31275: PUSH
31276: LD_INT 0
31278: GREATER
31279: AND
31280: IFFALSE 31345
// begin driver_rear = ai_mechanics_defend [ 1 ] [ 1 ] ;
31282: LD_ADDR_VAR 0 15
31286: PUSH
31287: LD_EXP 19
31291: PUSH
31292: LD_INT 1
31294: ARRAY
31295: PUSH
31296: LD_INT 1
31298: ARRAY
31299: ST_TO_ADDR
// temp_list = Delete ( ai_mechanics_defend [ 1 ] , 1 ) ;
31300: LD_ADDR_VAR 0 2
31304: PUSH
31305: LD_EXP 19
31309: PUSH
31310: LD_INT 1
31312: ARRAY
31313: PPUSH
31314: LD_INT 1
31316: PPUSH
31317: CALL_OW 3
31321: ST_TO_ADDR
// ai_mechanics_defend = Replace ( ai_mechanics_defend , 1 , temp_list ) ;
31322: LD_ADDR_EXP 19
31326: PUSH
31327: LD_EXP 19
31331: PPUSH
31332: LD_INT 1
31334: PPUSH
31335: LD_VAR 0 2
31339: PPUSH
31340: CALL_OW 1
31344: ST_TO_ADDR
// end ; repeat wait ( 0 0$0.7 ) ;
31345: LD_INT 24
31347: PPUSH
31348: CALL_OW 67
// timer = timer + 1 ;
31352: LD_ADDR_VAR 0 18
31356: PUSH
31357: LD_VAR 0 18
31361: PUSH
31362: LD_INT 1
31364: PLUS
31365: ST_TO_ADDR
// if gossudarov_escape_status <> 3 and IsDead ( Gossudarov ) then
31366: LD_EXP 88
31370: PUSH
31371: LD_INT 3
31373: NONEQUAL
31374: PUSH
31375: LD_EXP 13
31379: PPUSH
31380: CALL_OW 301
31384: AND
31385: IFFALSE 31397
// begin gossudarov_escape_status = 2 ;
31387: LD_ADDR_EXP 88
31391: PUSH
31392: LD_INT 2
31394: ST_TO_ADDR
// exit ;
31395: GO 34204
// end ; if russians_surrender then
31397: LD_EXP 76
31401: IFFALSE 31405
// exit ;
31403: GO 34204
// under_attack = false ;
31405: LD_ADDR_VAR 0 8
31409: PUSH
31410: LD_INT 0
31412: ST_TO_ADDR
// temp_list = UnitFilter ( [ Gossudarov , driver_front , driver_rear , escape_cargo_bay , escort_veh_front , escort_veh_rear ] , [ f_alive ] ) ;
31413: LD_ADDR_VAR 0 2
31417: PUSH
31418: LD_EXP 13
31422: PUSH
31423: LD_VAR 0 14
31427: PUSH
31428: LD_VAR 0 15
31432: PUSH
31433: LD_EXP 64
31437: PUSH
31438: LD_EXP 91
31442: PUSH
31443: LD_EXP 92
31447: PUSH
31448: EMPTY
31449: LIST
31450: LIST
31451: LIST
31452: LIST
31453: LIST
31454: LIST
31455: PPUSH
31456: LD_INT 51
31458: PUSH
31459: EMPTY
31460: LIST
31461: PPUSH
31462: CALL_OW 72
31466: ST_TO_ADDR
// for i in FilterAllUnits ( [ f_enemy , russians ] ) do
31467: LD_ADDR_VAR 0 1
31471: PUSH
31472: LD_INT 81
31474: PUSH
31475: LD_EXP 3
31479: PUSH
31480: EMPTY
31481: LIST
31482: LIST
31483: PPUSH
31484: CALL_OW 69
31488: PUSH
31489: FOR_IN
31490: IFFALSE 31521
// if Attacks ( i ) in temp_list then
31492: LD_VAR 0 1
31496: PPUSH
31497: CALL_OW 320
31501: PUSH
31502: LD_VAR 0 2
31506: IN
31507: IFFALSE 31519
// begin under_attack = true ;
31509: LD_ADDR_VAR 0 8
31513: PUSH
31514: LD_INT 1
31516: ST_TO_ADDR
// break ;
31517: GO 31521
// end ;
31519: GO 31489
31521: POP
31522: POP
// if gossudarov_escape_status = 0 then
31523: LD_EXP 88
31527: PUSH
31528: LD_INT 0
31530: EQUAL
31531: IFFALSE 31712
// begin if UnitFilter ( bunkers_west , [ f_ok ] ) < bunkers_west or ( UnitFilter ( bunkers_north , [ f_ok ] ) < bunkers_north and GetLives ( rubunk4 ) < 950 ) then
31533: LD_VAR 0 9
31537: PPUSH
31538: LD_INT 50
31540: PUSH
31541: EMPTY
31542: LIST
31543: PPUSH
31544: CALL_OW 72
31548: PUSH
31549: LD_VAR 0 9
31553: LESS
31554: PUSH
31555: LD_VAR 0 10
31559: PPUSH
31560: LD_INT 50
31562: PUSH
31563: EMPTY
31564: LIST
31565: PPUSH
31566: CALL_OW 72
31570: PUSH
31571: LD_VAR 0 10
31575: LESS
31576: PUSH
31577: LD_INT 9
31579: PPUSH
31580: CALL_OW 256
31584: PUSH
31585: LD_INT 950
31587: LESS
31588: AND
31589: OR
31590: IFFALSE 31602
// gossudarov_escape_status = 1 else
31592: LD_ADDR_EXP 88
31596: PUSH
31597: LD_INT 1
31599: ST_TO_ADDR
31600: GO 31712
// if check_escape then
31602: LD_EXP 93
31606: IFFALSE 31618
// gossudarov_escape_status = 1 else
31608: LD_ADDR_EXP 88
31612: PUSH
31613: LD_INT 1
31615: ST_TO_ADDR
31616: GO 31712
// if timer * 0 0$0.7 >= 0 0$50 then
31618: LD_VAR 0 18
31622: PUSH
31623: LD_INT 24
31625: MUL
31626: PUSH
31627: LD_INT 1750
31629: GREATEREQUAL
31630: IFFALSE 31712
// begin timer = 0 ;
31632: LD_ADDR_VAR 0 18
31636: PUSH
31637: LD_INT 0
31639: ST_TO_ADDR
// if Rand ( 1 , 2 ) = 1 then
31640: LD_INT 1
31642: PPUSH
31643: LD_INT 2
31645: PPUSH
31646: CALL_OW 12
31650: PUSH
31651: LD_INT 1
31653: EQUAL
31654: IFFALSE 31712
// if BaseUnderAttack ( 1 , - 1 ) and UnitFilter ( ai_all_buildings [ 1 ] , [ f_ok ] ) + 2 < ai_buildings_locations [ 1 ] then
31656: LD_INT 1
31658: PPUSH
31659: LD_INT 1
31661: NEG
31662: PPUSH
31663: CALL 16668 0 2
31667: PUSH
31668: LD_EXP 34
31672: PUSH
31673: LD_INT 1
31675: ARRAY
31676: PPUSH
31677: LD_INT 50
31679: PUSH
31680: EMPTY
31681: LIST
31682: PPUSH
31683: CALL_OW 72
31687: PUSH
31688: LD_INT 2
31690: PLUS
31691: PUSH
31692: LD_EXP 27
31696: PUSH
31697: LD_INT 1
31699: ARRAY
31700: LESS
31701: AND
31702: IFFALSE 31712
// gossudarov_escape_status = 1 ;
31704: LD_ADDR_EXP 88
31708: PUSH
31709: LD_INT 1
31711: ST_TO_ADDR
// end ; end ; if GetSide ( escort_veh_front ) <> russians then
31712: LD_EXP 91
31716: PPUSH
31717: CALL_OW 255
31721: PUSH
31722: LD_EXP 3
31726: NONEQUAL
31727: IFFALSE 31737
// escort_veh_front = 0 ;
31729: LD_ADDR_EXP 91
31733: PUSH
31734: LD_INT 0
31736: ST_TO_ADDR
// if GetSide ( escort_veh_rear ) <> russians then
31737: LD_EXP 92
31741: PPUSH
31742: CALL_OW 255
31746: PUSH
31747: LD_EXP 3
31751: NONEQUAL
31752: IFFALSE 31762
// escort_veh_rear = 0 ;
31754: LD_ADDR_EXP 92
31758: PUSH
31759: LD_INT 0
31761: ST_TO_ADDR
// if not IsOk ( driver_front ) then
31762: LD_VAR 0 14
31766: PPUSH
31767: CALL_OW 302
31771: NOT
31772: IFFALSE 31782
// driver_front = 0 ;
31774: LD_ADDR_VAR 0 14
31778: PUSH
31779: LD_INT 0
31781: ST_TO_ADDR
// if not IsOk ( driver_rear ) then
31782: LD_VAR 0 15
31786: PPUSH
31787: CALL_OW 302
31791: NOT
31792: IFFALSE 31802
// driver_rear = 0 ;
31794: LD_ADDR_VAR 0 15
31798: PUSH
31799: LD_INT 0
31801: ST_TO_ADDR
// temp_list = [ ] ;
31802: LD_ADDR_VAR 0 2
31806: PUSH
31807: EMPTY
31808: ST_TO_ADDR
// temp_list_2 = [ ] ;
31809: LD_ADDR_VAR 0 5
31813: PUSH
31814: EMPTY
31815: ST_TO_ADDR
// if IsOk ( driver_front ) then
31816: LD_VAR 0 14
31820: PPUSH
31821: CALL_OW 302
31825: IFFALSE 31859
// begin temp_list = temp_list ^ escort_veh_front ;
31827: LD_ADDR_VAR 0 2
31831: PUSH
31832: LD_VAR 0 2
31836: PUSH
31837: LD_EXP 91
31841: ADD
31842: ST_TO_ADDR
// temp_list_2 = temp_list_2 ^ driver_front ;
31843: LD_ADDR_VAR 0 5
31847: PUSH
31848: LD_VAR 0 5
31852: PUSH
31853: LD_VAR 0 14
31857: ADD
31858: ST_TO_ADDR
// end ; if IsOk ( driver_rear ) then
31859: LD_VAR 0 15
31863: PPUSH
31864: CALL_OW 302
31868: IFFALSE 31902
// begin temp_list = temp_list ^ escort_veh_rear ;
31870: LD_ADDR_VAR 0 2
31874: PUSH
31875: LD_VAR 0 2
31879: PUSH
31880: LD_EXP 92
31884: ADD
31885: ST_TO_ADDR
// temp_list_2 = temp_list_2 ^ driver_rear ;
31886: LD_ADDR_VAR 0 5
31890: PUSH
31891: LD_VAR 0 5
31895: PUSH
31896: LD_VAR 0 15
31900: ADD
31901: ST_TO_ADDR
// end ; for i = 1 to temp_list do
31902: LD_ADDR_VAR 0 1
31906: PUSH
31907: DOUBLE
31908: LD_INT 1
31910: DEC
31911: ST_TO_ADDR
31912: LD_VAR 0 2
31916: PUSH
31917: FOR_TO
31918: IFFALSE 32279
// begin if not IsOk ( escape_cargo_bay ) and not IsDead ( escape_cargo_bay ) and ( not under_attack or not IsLive ( temp_list_2 [ i ] ) ) then
31920: LD_EXP 64
31924: PPUSH
31925: CALL_OW 302
31929: NOT
31930: PUSH
31931: LD_EXP 64
31935: PPUSH
31936: CALL_OW 301
31940: NOT
31941: AND
31942: PUSH
31943: LD_VAR 0 8
31947: NOT
31948: PUSH
31949: LD_VAR 0 5
31953: PUSH
31954: LD_VAR 0 1
31958: ARRAY
31959: PPUSH
31960: CALL_OW 300
31964: NOT
31965: OR
31966: AND
31967: IFFALSE 32065
// begin case GetType ( IsInUnit ( temp_list_2 [ i ] ) ) of unit_vehicle :
31969: LD_VAR 0 5
31973: PUSH
31974: LD_VAR 0 1
31978: ARRAY
31979: PPUSH
31980: CALL_OW 310
31984: PPUSH
31985: CALL_OW 247
31989: PUSH
31990: LD_INT 2
31992: DOUBLE
31993: EQUAL
31994: IFTRUE 31998
31996: GO 32016
31998: POP
// ComExitVehicle ( temp_list_2 [ i ] ) ; unit_building :
31999: LD_VAR 0 5
32003: PUSH
32004: LD_VAR 0 1
32008: ARRAY
32009: PPUSH
32010: CALL_OW 121
32014: GO 32063
32016: LD_INT 3
32018: DOUBLE
32019: EQUAL
32020: IFTRUE 32024
32022: GO 32042
32024: POP
// ComExitBuilding ( temp_list_2 [ i ] ) ; else
32025: LD_VAR 0 5
32029: PUSH
32030: LD_VAR 0 1
32034: ARRAY
32035: PPUSH
32036: CALL_OW 122
32040: GO 32063
32042: POP
// ComRepairVehicle ( temp_list_2 [ i ] , escape_cargo_bay ) ; end ;
32043: LD_VAR 0 5
32047: PUSH
32048: LD_VAR 0 1
32052: ARRAY
32053: PPUSH
32054: LD_EXP 64
32058: PPUSH
32059: CALL_OW 129
// end else
32063: GO 32277
// begin if not IsLive ( temp_list [ i ] ) then
32065: LD_VAR 0 2
32069: PUSH
32070: LD_VAR 0 1
32074: ARRAY
32075: PPUSH
32076: CALL_OW 300
32080: NOT
32081: IFFALSE 32085
// continue ;
32083: GO 31917
// un = IsInUnit ( temp_list_2 [ i ] ) ;
32085: LD_ADDR_VAR 0 7
32089: PUSH
32090: LD_VAR 0 5
32094: PUSH
32095: LD_VAR 0 1
32099: ARRAY
32100: PPUSH
32101: CALL_OW 310
32105: ST_TO_ADDR
// if un <> temp_list [ i ] then
32106: LD_VAR 0 7
32110: PUSH
32111: LD_VAR 0 2
32115: PUSH
32116: LD_VAR 0 1
32120: ARRAY
32121: NONEQUAL
32122: IFFALSE 32277
// begin case GetType ( un ) of unit_vehicle :
32124: LD_VAR 0 7
32128: PPUSH
32129: CALL_OW 247
32133: PUSH
32134: LD_INT 2
32136: DOUBLE
32137: EQUAL
32138: IFTRUE 32142
32140: GO 32160
32142: POP
// ComExitVehicle ( temp_list_2 [ i ] ) ; unit_building :
32143: LD_VAR 0 5
32147: PUSH
32148: LD_VAR 0 1
32152: ARRAY
32153: PPUSH
32154: CALL_OW 121
32158: GO 32277
32160: LD_INT 3
32162: DOUBLE
32163: EQUAL
32164: IFTRUE 32168
32166: GO 32186
32168: POP
// ComExitBuilding ( temp_list_2 [ i ] ) ; else
32169: LD_VAR 0 5
32173: PUSH
32174: LD_VAR 0 1
32178: ARRAY
32179: PPUSH
32180: CALL_OW 122
32184: GO 32277
32186: POP
// begin if not IsOk ( temp_list [ i ] ) and not IsDead ( temp_list [ i ] ) then
32187: LD_VAR 0 2
32191: PUSH
32192: LD_VAR 0 1
32196: ARRAY
32197: PPUSH
32198: CALL_OW 302
32202: NOT
32203: PUSH
32204: LD_VAR 0 2
32208: PUSH
32209: LD_VAR 0 1
32213: ARRAY
32214: PPUSH
32215: CALL_OW 301
32219: NOT
32220: AND
32221: IFFALSE 32251
// ComRepairVehicle ( temp_list_2 [ i ] , temp_list [ i ] ) else
32223: LD_VAR 0 5
32227: PUSH
32228: LD_VAR 0 1
32232: ARRAY
32233: PPUSH
32234: LD_VAR 0 2
32238: PUSH
32239: LD_VAR 0 1
32243: ARRAY
32244: PPUSH
32245: CALL_OW 129
32249: GO 32277
// ComEnterUnit ( temp_list_2 [ i ] , temp_list [ i ] ) ;
32251: LD_VAR 0 5
32255: PUSH
32256: LD_VAR 0 1
32260: ARRAY
32261: PPUSH
32262: LD_VAR 0 2
32266: PUSH
32267: LD_VAR 0 1
32271: ARRAY
32272: PPUSH
32273: CALL_OW 120
// end ; end ; end ; end ; end ;
32277: GO 31917
32279: POP
32280: POP
// if gossudarov_escape_status <> 3 then
32281: LD_EXP 88
32285: PUSH
32286: LD_INT 3
32288: NONEQUAL
32289: IFFALSE 32549
// begin if IsOk ( escape_cargo_bay ) then
32291: LD_EXP 64
32295: PPUSH
32296: CALL_OW 302
32300: IFFALSE 32427
// begin cargo_bay_pos = [ GetX ( escape_cargo_bay ) , GetY ( escape_cargo_bay ) ] ;
32302: LD_ADDR_VAR 0 13
32306: PUSH
32307: LD_EXP 64
32311: PPUSH
32312: CALL_OW 250
32316: PUSH
32317: LD_EXP 64
32321: PPUSH
32322: CALL_OW 251
32326: PUSH
32327: EMPTY
32328: LIST
32329: LIST
32330: ST_TO_ADDR
// i = IsInUnit ( Gossudarov ) ;
32331: LD_ADDR_VAR 0 1
32335: PUSH
32336: LD_EXP 13
32340: PPUSH
32341: CALL_OW 310
32345: ST_TO_ADDR
// if i <> escape_cargo_bay then
32346: LD_VAR 0 1
32350: PUSH
32351: LD_EXP 64
32355: NONEQUAL
32356: IFFALSE 32425
// begin case GetType ( i ) of unit_vehicle :
32358: LD_VAR 0 1
32362: PPUSH
32363: CALL_OW 247
32367: PUSH
32368: LD_INT 2
32370: DOUBLE
32371: EQUAL
32372: IFTRUE 32376
32374: GO 32388
32376: POP
// ComExitVehicle ( Gossudarov ) ; unit_building :
32377: LD_EXP 13
32381: PPUSH
32382: CALL_OW 121
32386: GO 32423
32388: LD_INT 3
32390: DOUBLE
32391: EQUAL
32392: IFTRUE 32396
32394: GO 32408
32396: POP
// ComExitBuilding ( Gossudarov ) ; else
32397: LD_EXP 13
32401: PPUSH
32402: CALL_OW 122
32406: GO 32423
32408: POP
// ComEnterUnit ( Gossudarov , escape_cargo_bay ) ; end ;
32409: LD_EXP 13
32413: PPUSH
32414: LD_EXP 64
32418: PPUSH
32419: CALL_OW 120
// continue ;
32423: GO 31345
// end ; end else
32425: GO 32549
// begin if not IsLive ( escape_cargo_bay ) or UnitFilter ( [ driver_front , driver_rear ] , [ f_alive ] ) = 0 then
32427: LD_EXP 64
32431: PPUSH
32432: CALL_OW 300
32436: NOT
32437: PUSH
32438: LD_VAR 0 14
32442: PUSH
32443: LD_VAR 0 15
32447: PUSH
32448: EMPTY
32449: LIST
32450: LIST
32451: PPUSH
32452: LD_INT 51
32454: PUSH
32455: EMPTY
32456: LIST
32457: PPUSH
32458: CALL_OW 72
32462: PUSH
32463: LD_INT 0
32465: EQUAL
32466: OR
32467: IFFALSE 32477
// gossudarov_escape_status = 2 ;
32469: LD_ADDR_EXP 88
32473: PUSH
32474: LD_INT 2
32476: ST_TO_ADDR
// if cargo_bay_pos > 0 then
32477: LD_VAR 0 13
32481: PUSH
32482: LD_INT 0
32484: GREATER
32485: IFFALSE 32547
// if GetDistUnitXY ( Gossudarov , cargo_bay_pos [ 1 ] , cargo_bay_pos [ 2 ] ) > 4 then
32487: LD_EXP 13
32491: PPUSH
32492: LD_VAR 0 13
32496: PUSH
32497: LD_INT 1
32499: ARRAY
32500: PPUSH
32501: LD_VAR 0 13
32505: PUSH
32506: LD_INT 2
32508: ARRAY
32509: PPUSH
32510: CALL_OW 297
32514: PUSH
32515: LD_INT 4
32517: GREATER
32518: IFFALSE 32547
// ComMoveXY ( Gossudarov , cargo_bay_pos [ 1 ] , cargo_bay_pos [ 2 ] ) ;
32520: LD_EXP 13
32524: PPUSH
32525: LD_VAR 0 13
32529: PUSH
32530: LD_INT 1
32532: ARRAY
32533: PPUSH
32534: LD_VAR 0 13
32538: PUSH
32539: LD_INT 2
32541: ARRAY
32542: PPUSH
32543: CALL_OW 111
// continue ;
32547: GO 31345
// end ; end ; if GetCargoType ( escape_cargo_bay ) <> mat_artifact and gossudarov_escape_status <> 3 then
32549: LD_EXP 64
32553: PPUSH
32554: CALL_OW 288
32558: PUSH
32559: LD_INT 4
32561: NONEQUAL
32562: PUSH
32563: LD_EXP 88
32567: PUSH
32568: LD_INT 3
32570: NONEQUAL
32571: AND
32572: IFFALSE 32754
// begin temp_list = GetListOfCratesInArea ( crate_gather_area ) ;
32574: LD_ADDR_VAR 0 2
32578: PUSH
32579: LD_INT 4
32581: PPUSH
32582: CALL_OW 435
32586: ST_TO_ADDR
// x = 0 ;
32587: LD_ADDR_VAR 0 3
32591: PUSH
32592: LD_INT 0
32594: ST_TO_ADDR
// y = 0 ;
32595: LD_ADDR_VAR 0 4
32599: PUSH
32600: LD_INT 0
32602: ST_TO_ADDR
// i = 1 ;
32603: LD_ADDR_VAR 0 1
32607: PUSH
32608: LD_INT 1
32610: ST_TO_ADDR
// while i < temp_list do
32611: LD_VAR 0 1
32615: PUSH
32616: LD_VAR 0 2
32620: LESS
32621: IFFALSE 32713
// begin if GetResourceTypeXY ( temp_list [ i ] , temp_list [ i + 1 ] ) = mat_artefact then
32623: LD_VAR 0 2
32627: PUSH
32628: LD_VAR 0 1
32632: ARRAY
32633: PPUSH
32634: LD_VAR 0 2
32638: PUSH
32639: LD_VAR 0 1
32643: PUSH
32644: LD_INT 1
32646: PLUS
32647: ARRAY
32648: PPUSH
32649: CALL_OW 283
32653: PUSH
32654: LD_INT 4
32656: EQUAL
32657: IFFALSE 32697
// begin x = temp_list [ i ] ;
32659: LD_ADDR_VAR 0 3
32663: PUSH
32664: LD_VAR 0 2
32668: PUSH
32669: LD_VAR 0 1
32673: ARRAY
32674: ST_TO_ADDR
// y = temp_list [ i + 1 ] ;
32675: LD_ADDR_VAR 0 4
32679: PUSH
32680: LD_VAR 0 2
32684: PUSH
32685: LD_VAR 0 1
32689: PUSH
32690: LD_INT 1
32692: PLUS
32693: ARRAY
32694: ST_TO_ADDR
// break ;
32695: GO 32713
// end ; i = i + 2 ;
32697: LD_ADDR_VAR 0 1
32701: PUSH
32702: LD_VAR 0 1
32706: PUSH
32707: LD_INT 2
32709: PLUS
32710: ST_TO_ADDR
// end ;
32711: GO 32611
// if x > 0 and y > 0 then
32713: LD_VAR 0 3
32717: PUSH
32718: LD_INT 0
32720: GREATER
32721: PUSH
32722: LD_VAR 0 4
32726: PUSH
32727: LD_INT 0
32729: GREATER
32730: AND
32731: IFFALSE 32752
// ComGet ( escape_cargo_bay , x , y ) ;
32733: LD_EXP 64
32737: PPUSH
32738: LD_VAR 0 3
32742: PPUSH
32743: LD_VAR 0 4
32747: PPUSH
32748: CALL_OW 160
// continue ;
32752: GO 31345
// end ; if gossudarov_escape_status = 0 then
32754: LD_EXP 88
32758: PUSH
32759: LD_INT 0
32761: EQUAL
32762: IFFALSE 32766
// continue ;
32764: GO 31345
// if UnitFilter ( [ Gossudarov , driver_front , driver_rear , escape_cargo_bay , escort_veh_front , escort_veh_rear ] , [ f_see , you ] ) > 0 then
32766: LD_EXP 13
32770: PUSH
32771: LD_VAR 0 14
32775: PUSH
32776: LD_VAR 0 15
32780: PUSH
32781: LD_EXP 64
32785: PUSH
32786: LD_EXP 91
32790: PUSH
32791: LD_EXP 92
32795: PUSH
32796: EMPTY
32797: LIST
32798: LIST
32799: LIST
32800: LIST
32801: LIST
32802: LIST
32803: PPUSH
32804: LD_INT 101
32806: PUSH
32807: LD_EXP 2
32811: PUSH
32812: EMPTY
32813: LIST
32814: LIST
32815: PPUSH
32816: CALL_OW 72
32820: PUSH
32821: LD_INT 0
32823: GREATER
32824: IFFALSE 32836
// last_seen_tick = tick ;
32826: LD_ADDR_VAR 0 17
32830: PUSH
32831: LD_OWVAR 1
32835: ST_TO_ADDR
// if escape_route = 0 then
32836: LD_VAR 0 11
32840: PUSH
32841: LD_INT 0
32843: EQUAL
32844: IFFALSE 33465
// begin temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_ok ] , [ f_inarea , escape_area_1 ] ] ) ;
32846: LD_ADDR_VAR 0 2
32850: PUSH
32851: LD_INT 22
32853: PUSH
32854: LD_EXP 2
32858: PUSH
32859: EMPTY
32860: LIST
32861: LIST
32862: PUSH
32863: LD_INT 50
32865: PUSH
32866: EMPTY
32867: LIST
32868: PUSH
32869: LD_INT 95
32871: PUSH
32872: LD_INT 7
32874: PUSH
32875: EMPTY
32876: LIST
32877: LIST
32878: PUSH
32879: EMPTY
32880: LIST
32881: LIST
32882: LIST
32883: PPUSH
32884: CALL_OW 69
32888: ST_TO_ADDR
// temp_list_2 = FilterAllUnits ( [ [ f_side , you ] , [ f_ok ] , [ f_inarea , escape_area_2 ] ] ) ;
32889: LD_ADDR_VAR 0 5
32893: PUSH
32894: LD_INT 22
32896: PUSH
32897: LD_EXP 2
32901: PUSH
32902: EMPTY
32903: LIST
32904: LIST
32905: PUSH
32906: LD_INT 50
32908: PUSH
32909: EMPTY
32910: LIST
32911: PUSH
32912: LD_INT 95
32914: PUSH
32915: LD_INT 8
32917: PUSH
32918: EMPTY
32919: LIST
32920: LIST
32921: PUSH
32922: EMPTY
32923: LIST
32924: LIST
32925: LIST
32926: PPUSH
32927: CALL_OW 69
32931: ST_TO_ADDR
// temp_list_3 = FilterAllUnits ( [ [ f_side , you ] , [ f_ok ] , [ f_inarea , escape_area_3 ] ] ) ;
32932: LD_ADDR_VAR 0 6
32936: PUSH
32937: LD_INT 22
32939: PUSH
32940: LD_EXP 2
32944: PUSH
32945: EMPTY
32946: LIST
32947: LIST
32948: PUSH
32949: LD_INT 50
32951: PUSH
32952: EMPTY
32953: LIST
32954: PUSH
32955: LD_INT 95
32957: PUSH
32958: LD_INT 9
32960: PUSH
32961: EMPTY
32962: LIST
32963: LIST
32964: PUSH
32965: EMPTY
32966: LIST
32967: LIST
32968: LIST
32969: PPUSH
32970: CALL_OW 69
32974: ST_TO_ADDR
// if temp_list = 0 and temp_list_2 = 0 then
32975: LD_VAR 0 2
32979: PUSH
32980: LD_INT 0
32982: EQUAL
32983: PUSH
32984: LD_VAR 0 5
32988: PUSH
32989: LD_INT 0
32991: EQUAL
32992: AND
32993: IFFALSE 33005
// i = 1 else
32995: LD_ADDR_VAR 0 1
32999: PUSH
33000: LD_INT 1
33002: ST_TO_ADDR
33003: GO 33146
// if temp_list_3 = 0 then
33005: LD_VAR 0 6
33009: PUSH
33010: LD_INT 0
33012: EQUAL
33013: IFFALSE 33025
// i = 3 else
33015: LD_ADDR_VAR 0 1
33019: PUSH
33020: LD_INT 3
33022: ST_TO_ADDR
33023: GO 33146
// case WorstFromListByList ( [ temp_list , temp_list_2 , temp_list_3 ] , [ temp_list + 0 , temp_list_2 + 0 , temp_list_3 + 0 ] ) of temp_list :
33025: LD_VAR 0 2
33029: PUSH
33030: LD_VAR 0 5
33034: PUSH
33035: LD_VAR 0 6
33039: PUSH
33040: EMPTY
33041: LIST
33042: LIST
33043: LIST
33044: PPUSH
33045: LD_VAR 0 2
33049: PUSH
33050: LD_INT 0
33052: PLUS
33053: PUSH
33054: LD_VAR 0 5
33058: PUSH
33059: LD_INT 0
33061: PLUS
33062: PUSH
33063: LD_VAR 0 6
33067: PUSH
33068: LD_INT 0
33070: PLUS
33071: PUSH
33072: EMPTY
33073: LIST
33074: LIST
33075: LIST
33076: PPUSH
33077: CALL_OW 78
33081: PUSH
33082: LD_VAR 0 2
33086: DOUBLE
33087: EQUAL
33088: IFTRUE 33092
33090: GO 33103
33092: POP
// i = 1 ; temp_list_2 :
33093: LD_ADDR_VAR 0 1
33097: PUSH
33098: LD_INT 1
33100: ST_TO_ADDR
33101: GO 33146
33103: LD_VAR 0 5
33107: DOUBLE
33108: EQUAL
33109: IFTRUE 33113
33111: GO 33124
33113: POP
// i = 2 ; temp_list_3 :
33114: LD_ADDR_VAR 0 1
33118: PUSH
33119: LD_INT 2
33121: ST_TO_ADDR
33122: GO 33146
33124: LD_VAR 0 6
33128: DOUBLE
33129: EQUAL
33130: IFTRUE 33134
33132: GO 33145
33134: POP
// i = 3 ; end ;
33135: LD_ADDR_VAR 0 1
33139: PUSH
33140: LD_INT 3
33142: ST_TO_ADDR
33143: GO 33146
33145: POP
// case i of 1 :
33146: LD_VAR 0 1
33150: PUSH
33151: LD_INT 1
33153: DOUBLE
33154: EQUAL
33155: IFTRUE 33159
33157: GO 33224
33159: POP
// escape_route = [ [ 165 , 83 ] , [ 153 , 88 ] , [ 138 , 85 ] , [ 121 , 81 ] , [ 111 , 89 ] ] ; 2 :
33160: LD_ADDR_VAR 0 11
33164: PUSH
33165: LD_INT 165
33167: PUSH
33168: LD_INT 83
33170: PUSH
33171: EMPTY
33172: LIST
33173: LIST
33174: PUSH
33175: LD_INT 153
33177: PUSH
33178: LD_INT 88
33180: PUSH
33181: EMPTY
33182: LIST
33183: LIST
33184: PUSH
33185: LD_INT 138
33187: PUSH
33188: LD_INT 85
33190: PUSH
33191: EMPTY
33192: LIST
33193: LIST
33194: PUSH
33195: LD_INT 121
33197: PUSH
33198: LD_INT 81
33200: PUSH
33201: EMPTY
33202: LIST
33203: LIST
33204: PUSH
33205: LD_INT 111
33207: PUSH
33208: LD_INT 89
33210: PUSH
33211: EMPTY
33212: LIST
33213: LIST
33214: PUSH
33215: EMPTY
33216: LIST
33217: LIST
33218: LIST
33219: LIST
33220: LIST
33221: ST_TO_ADDR
33222: GO 33415
33224: LD_INT 2
33226: DOUBLE
33227: EQUAL
33228: IFTRUE 33232
33230: GO 33319
33232: POP
// escape_route = [ [ 172 , 74 ] , [ 161 , 70 ] , [ 140 , 51 ] , [ 129 , 38 ] , [ 122 , 26 ] , [ 124 , 15 ] , [ 111 , 13 ] ] ; 3 :
33233: LD_ADDR_VAR 0 11
33237: PUSH
33238: LD_INT 172
33240: PUSH
33241: LD_INT 74
33243: PUSH
33244: EMPTY
33245: LIST
33246: LIST
33247: PUSH
33248: LD_INT 161
33250: PUSH
33251: LD_INT 70
33253: PUSH
33254: EMPTY
33255: LIST
33256: LIST
33257: PUSH
33258: LD_INT 140
33260: PUSH
33261: LD_INT 51
33263: PUSH
33264: EMPTY
33265: LIST
33266: LIST
33267: PUSH
33268: LD_INT 129
33270: PUSH
33271: LD_INT 38
33273: PUSH
33274: EMPTY
33275: LIST
33276: LIST
33277: PUSH
33278: LD_INT 122
33280: PUSH
33281: LD_INT 26
33283: PUSH
33284: EMPTY
33285: LIST
33286: LIST
33287: PUSH
33288: LD_INT 124
33290: PUSH
33291: LD_INT 15
33293: PUSH
33294: EMPTY
33295: LIST
33296: LIST
33297: PUSH
33298: LD_INT 111
33300: PUSH
33301: LD_INT 13
33303: PUSH
33304: EMPTY
33305: LIST
33306: LIST
33307: PUSH
33308: EMPTY
33309: LIST
33310: LIST
33311: LIST
33312: LIST
33313: LIST
33314: LIST
33315: LIST
33316: ST_TO_ADDR
33317: GO 33415
33319: LD_INT 3
33321: DOUBLE
33322: EQUAL
33323: IFTRUE 33327
33325: GO 33414
33327: POP
// escape_route = [ [ 175 , 69 ] , [ 177 , 54 ] , [ 168 , 32 ] , [ 151 , 19 ] , [ 134 , 12 ] , [ 124 , 15 ] , [ 111 , 13 ] ] ; end ;
33328: LD_ADDR_VAR 0 11
33332: PUSH
33333: LD_INT 175
33335: PUSH
33336: LD_INT 69
33338: PUSH
33339: EMPTY
33340: LIST
33341: LIST
33342: PUSH
33343: LD_INT 177
33345: PUSH
33346: LD_INT 54
33348: PUSH
33349: EMPTY
33350: LIST
33351: LIST
33352: PUSH
33353: LD_INT 168
33355: PUSH
33356: LD_INT 32
33358: PUSH
33359: EMPTY
33360: LIST
33361: LIST
33362: PUSH
33363: LD_INT 151
33365: PUSH
33366: LD_INT 19
33368: PUSH
33369: EMPTY
33370: LIST
33371: LIST
33372: PUSH
33373: LD_INT 134
33375: PUSH
33376: LD_INT 12
33378: PUSH
33379: EMPTY
33380: LIST
33381: LIST
33382: PUSH
33383: LD_INT 124
33385: PUSH
33386: LD_INT 15
33388: PUSH
33389: EMPTY
33390: LIST
33391: LIST
33392: PUSH
33393: LD_INT 111
33395: PUSH
33396: LD_INT 13
33398: PUSH
33399: EMPTY
33400: LIST
33401: LIST
33402: PUSH
33403: EMPTY
33404: LIST
33405: LIST
33406: LIST
33407: LIST
33408: LIST
33409: LIST
33410: LIST
33411: ST_TO_ADDR
33412: GO 33415
33414: POP
// case i of 1 :
33415: LD_VAR 0 1
33419: PUSH
33420: LD_INT 1
33422: DOUBLE
33423: EQUAL
33424: IFTRUE 33428
33426: GO 33439
33428: POP
// escape_area = gensher_reinforcements_area ; 2 , 3 :
33429: LD_ADDR_VAR 0 16
33433: PUSH
33434: LD_INT 6
33436: ST_TO_ADDR
33437: GO 33465
33439: LD_INT 2
33441: DOUBLE
33442: EQUAL
33443: IFTRUE 33453
33445: LD_INT 3
33447: DOUBLE
33448: EQUAL
33449: IFTRUE 33453
33451: GO 33464
33453: POP
// escape_area = attack_spawn_2 ; end ;
33454: LD_ADDR_VAR 0 16
33458: PUSH
33459: LD_INT 10
33461: ST_TO_ADDR
33462: GO 33465
33464: POP
// end ; temp_list = [ ] ;
33465: LD_ADDR_VAR 0 2
33469: PUSH
33470: EMPTY
33471: ST_TO_ADDR
// if IsOk ( driver_front ) then
33472: LD_VAR 0 14
33476: PPUSH
33477: CALL_OW 302
33481: IFFALSE 33528
// if IsLive ( escort_veh_front ) then
33483: LD_EXP 91
33487: PPUSH
33488: CALL_OW 300
33492: IFFALSE 33512
// temp_list = temp_list ^ escort_veh_front else
33494: LD_ADDR_VAR 0 2
33498: PUSH
33499: LD_VAR 0 2
33503: PUSH
33504: LD_EXP 91
33508: ADD
33509: ST_TO_ADDR
33510: GO 33528
// temp_list = temp_list ^ driver_front ;
33512: LD_ADDR_VAR 0 2
33516: PUSH
33517: LD_VAR 0 2
33521: PUSH
33522: LD_VAR 0 14
33526: ADD
33527: ST_TO_ADDR
// if IsOk ( escape_cargo_bay ) then
33528: LD_EXP 64
33532: PPUSH
33533: CALL_OW 302
33537: IFFALSE 33555
// temp_list = temp_list ^ escape_cargo_bay ;
33539: LD_ADDR_VAR 0 2
33543: PUSH
33544: LD_VAR 0 2
33548: PUSH
33549: LD_EXP 64
33553: ADD
33554: ST_TO_ADDR
// if IsOk ( driver_rear ) then
33555: LD_VAR 0 15
33559: PPUSH
33560: CALL_OW 302
33564: IFFALSE 33611
// if IsLive ( escort_veh_rear ) then
33566: LD_EXP 92
33570: PPUSH
33571: CALL_OW 300
33575: IFFALSE 33595
// temp_list = temp_list ^ escort_veh_rear else
33577: LD_ADDR_VAR 0 2
33581: PUSH
33582: LD_VAR 0 2
33586: PUSH
33587: LD_EXP 92
33591: ADD
33592: ST_TO_ADDR
33593: GO 33611
// temp_list = temp_list ^ driver_rear ;
33595: LD_ADDR_VAR 0 2
33599: PUSH
33600: LD_VAR 0 2
33604: PUSH
33605: LD_VAR 0 15
33609: ADD
33610: ST_TO_ADDR
// for i = 1 to temp_list do
33611: LD_ADDR_VAR 0 1
33615: PUSH
33616: DOUBLE
33617: LD_INT 1
33619: DEC
33620: ST_TO_ADDR
33621: LD_VAR 0 2
33625: PUSH
33626: FOR_TO
33627: IFFALSE 34148
// begin if hex_index > escape_route then
33629: LD_VAR 0 12
33633: PUSH
33634: LD_VAR 0 11
33638: GREATER
33639: IFFALSE 33851
// begin if not IsInArea ( temp_list [ i ] , escape_area ) then
33641: LD_VAR 0 2
33645: PUSH
33646: LD_VAR 0 1
33650: ARRAY
33651: PPUSH
33652: LD_VAR 0 16
33656: PPUSH
33657: CALL_OW 308
33661: NOT
33662: IFFALSE 33686
// ComMoveToArea ( temp_list [ i ] , escape_area ) else
33664: LD_VAR 0 2
33668: PUSH
33669: LD_VAR 0 1
33673: ARRAY
33674: PPUSH
33675: LD_VAR 0 16
33679: PPUSH
33680: CALL_OW 113
33684: GO 33849
// begin temp_list_2 = UnitsInside ( temp_list [ i ] ) ;
33686: LD_ADDR_VAR 0 5
33690: PUSH
33691: LD_VAR 0 2
33695: PUSH
33696: LD_VAR 0 1
33700: ARRAY
33701: PPUSH
33702: CALL_OW 313
33706: ST_TO_ADDR
// if temp_list_2 > 0 then
33707: LD_VAR 0 5
33711: PUSH
33712: LD_INT 0
33714: GREATER
33715: IFFALSE 33730
// DestroyUnit ( temp_list_2 [ 1 ] ) ;
33717: LD_VAR 0 5
33721: PUSH
33722: LD_INT 1
33724: ARRAY
33725: PPUSH
33726: CALL_OW 65
// DestroyUnit ( temp_list [ i ] ) ;
33730: LD_VAR 0 2
33734: PUSH
33735: LD_VAR 0 1
33739: ARRAY
33740: PPUSH
33741: CALL_OW 65
// if temp_list [ i ] = escape_cargo_bay then
33745: LD_VAR 0 2
33749: PUSH
33750: LD_VAR 0 1
33754: ARRAY
33755: PUSH
33756: LD_EXP 64
33760: EQUAL
33761: IFFALSE 33849
// begin temp_list_2 = FindArtifact ( 4 ) ;
33763: LD_ADDR_VAR 0 5
33767: PUSH
33768: LD_INT 4
33770: PPUSH
33771: CALL_OW 469
33775: ST_TO_ADDR
// ChangeResourceAmountXY ( temp_list_2 [ 1 ] , temp_list_2 [ 2 ] , 0 ) ;
33776: LD_VAR 0 5
33780: PUSH
33781: LD_INT 1
33783: ARRAY
33784: PPUSH
33785: LD_VAR 0 5
33789: PUSH
33790: LD_INT 2
33792: ARRAY
33793: PPUSH
33794: LD_INT 0
33796: PPUSH
33797: CALL_OW 285
// if tick - last_seen_tick <= 0 0$7 then
33801: LD_OWVAR 1
33805: PUSH
33806: LD_VAR 0 17
33810: MINUS
33811: PUSH
33812: LD_INT 245
33814: LESSEQUAL
33815: IFFALSE 33841
// begin ExclusiveOn ;
33817: CALL_OW 4
// wait ( 0 0$1 ) ;
33821: LD_INT 35
33823: PPUSH
33824: CALL_OW 67
// YouLost ( ArtifactGone ) ;
33828: LD_STRING ArtifactGone
33830: PPUSH
33831: CALL_OW 104
// ExclusiveOff ;
33835: CALL_OW 5
// end else
33839: GO 33849
// gossudarov_escape_status = 3 ;
33841: LD_ADDR_EXP 88
33845: PUSH
33846: LD_INT 3
33848: ST_TO_ADDR
// end ; end ; end else
33849: GO 34146
// if i = 1 then
33851: LD_VAR 0 1
33855: PUSH
33856: LD_INT 1
33858: EQUAL
33859: IFFALSE 34035
// begin if GetDistUnitXY ( temp_list [ i ] , escape_route [ hex_index ] [ 1 ] , escape_route [ hex_index ] [ 2 ] ) > 5 then
33861: LD_VAR 0 2
33865: PUSH
33866: LD_VAR 0 1
33870: ARRAY
33871: PPUSH
33872: LD_VAR 0 11
33876: PUSH
33877: LD_VAR 0 12
33881: ARRAY
33882: PUSH
33883: LD_INT 1
33885: ARRAY
33886: PPUSH
33887: LD_VAR 0 11
33891: PUSH
33892: LD_VAR 0 12
33896: ARRAY
33897: PUSH
33898: LD_INT 2
33900: ARRAY
33901: PPUSH
33902: CALL_OW 297
33906: PUSH
33907: LD_INT 5
33909: GREATER
33910: IFFALSE 33959
// ComMoveXY ( temp_list [ i ] , escape_route [ hex_index ] [ 1 ] , escape_route [ hex_index ] [ 2 ] ) else
33912: LD_VAR 0 2
33916: PUSH
33917: LD_VAR 0 1
33921: ARRAY
33922: PPUSH
33923: LD_VAR 0 11
33927: PUSH
33928: LD_VAR 0 12
33932: ARRAY
33933: PUSH
33934: LD_INT 1
33936: ARRAY
33937: PPUSH
33938: LD_VAR 0 11
33942: PUSH
33943: LD_VAR 0 12
33947: ARRAY
33948: PUSH
33949: LD_INT 2
33951: ARRAY
33952: PPUSH
33953: CALL_OW 111
33957: GO 34033
// begin un = true ;
33959: LD_ADDR_VAR 0 7
33963: PUSH
33964: LD_INT 1
33966: ST_TO_ADDR
// if temp_list > 1 then
33967: LD_VAR 0 2
33971: PUSH
33972: LD_INT 1
33974: GREATER
33975: IFFALSE 34013
// if GetDistUnits ( temp_list [ 1 ] , temp_list [ 2 ] ) > 5 then
33977: LD_VAR 0 2
33981: PUSH
33982: LD_INT 1
33984: ARRAY
33985: PPUSH
33986: LD_VAR 0 2
33990: PUSH
33991: LD_INT 2
33993: ARRAY
33994: PPUSH
33995: CALL_OW 296
33999: PUSH
34000: LD_INT 5
34002: GREATER
34003: IFFALSE 34013
// un = false ;
34005: LD_ADDR_VAR 0 7
34009: PUSH
34010: LD_INT 0
34012: ST_TO_ADDR
// if un then
34013: LD_VAR 0 7
34017: IFFALSE 34033
// hex_index = hex_index + 1 ;
34019: LD_ADDR_VAR 0 12
34023: PUSH
34024: LD_VAR 0 12
34028: PUSH
34029: LD_INT 1
34031: PLUS
34032: ST_TO_ADDR
// end ; end else
34033: GO 34146
// begin un = AI_InvertDirection ( GetDir ( temp_list [ i - 1 ] ) ) ;
34035: LD_ADDR_VAR 0 7
34039: PUSH
34040: LD_VAR 0 2
34044: PUSH
34045: LD_VAR 0 1
34049: PUSH
34050: LD_INT 1
34052: MINUS
34053: ARRAY
34054: PPUSH
34055: CALL_OW 254
34059: PPUSH
34060: CALL 24644 0 1
34064: ST_TO_ADDR
// ComMoveXY ( temp_list [ i ] , ShiftX ( GetX ( temp_list [ i - 1 ] ) , un , 3 ) , ShiftY ( GetY ( temp_list [ i - 1 ] ) , un , 3 ) ) ;
34065: LD_VAR 0 2
34069: PUSH
34070: LD_VAR 0 1
34074: ARRAY
34075: PPUSH
34076: LD_VAR 0 2
34080: PUSH
34081: LD_VAR 0 1
34085: PUSH
34086: LD_INT 1
34088: MINUS
34089: ARRAY
34090: PPUSH
34091: CALL_OW 250
34095: PPUSH
34096: LD_VAR 0 7
34100: PPUSH
34101: LD_INT 3
34103: PPUSH
34104: CALL_OW 272
34108: PPUSH
34109: LD_VAR 0 2
34113: PUSH
34114: LD_VAR 0 1
34118: PUSH
34119: LD_INT 1
34121: MINUS
34122: ARRAY
34123: PPUSH
34124: CALL_OW 251
34128: PPUSH
34129: LD_VAR 0 7
34133: PPUSH
34134: LD_INT 3
34136: PPUSH
34137: CALL_OW 273
34141: PPUSH
34142: CALL_OW 111
// end ; end ;
34146: GO 33626
34148: POP
34149: POP
// until UnitFilter ( [ Gossudarov , driver_front , driver_rear , escape_cargo_bay , escort_veh_front , escort_veh_rear ] , [ f_alive ] ) = 0 ;
34150: LD_EXP 13
34154: PUSH
34155: LD_VAR 0 14
34159: PUSH
34160: LD_VAR 0 15
34164: PUSH
34165: LD_EXP 64
34169: PUSH
34170: LD_EXP 91
34174: PUSH
34175: LD_EXP 92
34179: PUSH
34180: EMPTY
34181: LIST
34182: LIST
34183: LIST
34184: LIST
34185: LIST
34186: LIST
34187: PPUSH
34188: LD_INT 51
34190: PUSH
34191: EMPTY
34192: LIST
34193: PPUSH
34194: CALL_OW 72
34198: PUSH
34199: LD_INT 0
34201: EQUAL
34202: IFFALSE 31345
// end ;
34204: PPOPN 18
34206: END
// every 0 0$1 + 0 0$0.8 do var val , dialogue_traitors , temp_list ;
34207: GO 34209
34209: DISABLE
34210: LD_INT 0
34212: PPUSH
34213: PPUSH
34214: PPUSH
// begin repeat wait ( 0 0$1 ) ;
34215: LD_INT 35
34217: PPUSH
34218: CALL_OW 67
// if IsDead ( Gossudarov ) or gossudarov_escape_status = 3 then
34222: LD_EXP 13
34226: PPUSH
34227: CALL_OW 301
34231: PUSH
34232: LD_EXP 88
34236: PUSH
34237: LD_INT 3
34239: EQUAL
34240: OR
34241: IFFALSE 34303
// begin if FilterAllUnits ( [ [ f_side , russians ] , [ f_type , unit_human ] , [ f_ok ] ] ) = 0 then
34243: LD_INT 22
34245: PUSH
34246: LD_EXP 3
34250: PUSH
34251: EMPTY
34252: LIST
34253: LIST
34254: PUSH
34255: LD_INT 21
34257: PUSH
34258: LD_INT 1
34260: PUSH
34261: EMPTY
34262: LIST
34263: LIST
34264: PUSH
34265: LD_INT 50
34267: PUSH
34268: EMPTY
34269: LIST
34270: PUSH
34271: EMPTY
34272: LIST
34273: LIST
34274: LIST
34275: PPUSH
34276: CALL_OW 69
34280: PUSH
34281: LD_INT 0
34283: EQUAL
34284: IFFALSE 34301
// begin russians_surrender = true ;
34286: LD_ADDR_EXP 76
34290: PUSH
34291: LD_INT 1
34293: ST_TO_ADDR
// russian_prisoners = [ ] ;
34294: LD_ADDR_EXP 80
34298: PUSH
34299: EMPTY
34300: ST_TO_ADDR
// end ; end else
34301: GO 34368
// if gossudarov_escape_status = 2 then
34303: LD_EXP 88
34307: PUSH
34308: LD_INT 2
34310: EQUAL
34311: IFFALSE 34368
// begin russians_surrender = true ;
34313: LD_ADDR_EXP 76
34317: PUSH
34318: LD_INT 1
34320: ST_TO_ADDR
// russian_prisoners = ListWithoutApemen ( FilterAllUnits ( [ [ f_side , russians ] , [ f_type , unit_human ] ] ) ) diff Gossudarov ;
34321: LD_ADDR_EXP 80
34325: PUSH
34326: LD_INT 22
34328: PUSH
34329: LD_EXP 3
34333: PUSH
34334: EMPTY
34335: LIST
34336: LIST
34337: PUSH
34338: LD_INT 21
34340: PUSH
34341: LD_INT 1
34343: PUSH
34344: EMPTY
34345: LIST
34346: LIST
34347: PUSH
34348: EMPTY
34349: LIST
34350: LIST
34351: PPUSH
34352: CALL_OW 69
34356: PPUSH
34357: CALL 35564 0 1
34361: PUSH
34362: LD_EXP 13
34366: DIFF
34367: ST_TO_ADDR
// end ; until russians_surrender ;
34368: LD_EXP 76
34372: IFFALSE 34215
// DialogueOn ;
34374: CALL_OW 6
// if gossudarov_escape_status = 3 then
34378: LD_EXP 88
34382: PUSH
34383: LD_INT 3
34385: EQUAL
34386: IFFALSE 34613
// begin Say ( Heike , D12-H-1 ) ;
34388: LD_EXP 7
34392: PPUSH
34393: LD_STRING D12-H-1
34395: PPUSH
34396: CALL_OW 88
// temp_list = UnitFilter ( [ Dwayne , Oswald ] , [ f_ok ] ) ;
34400: LD_ADDR_VAR 0 3
34404: PUSH
34405: LD_EXP 8
34409: PUSH
34410: LD_EXP 9
34414: PUSH
34415: EMPTY
34416: LIST
34417: LIST
34418: PPUSH
34419: LD_INT 50
34421: PUSH
34422: EMPTY
34423: LIST
34424: PPUSH
34425: CALL_OW 72
34429: ST_TO_ADDR
// if temp_list > 0 then
34430: LD_VAR 0 3
34434: PUSH
34435: LD_INT 0
34437: GREATER
34438: IFFALSE 34530
// case temp_list [ Rand ( 1 , temp_list ) ] of Oswald :
34440: LD_VAR 0 3
34444: PUSH
34445: LD_INT 1
34447: PPUSH
34448: LD_VAR 0 3
34452: PPUSH
34453: CALL_OW 12
34457: ARRAY
34458: PUSH
34459: LD_EXP 9
34463: DOUBLE
34464: EQUAL
34465: IFTRUE 34469
34467: GO 34504
34469: POP
// begin if oswald_is_substitute then
34470: LD_EXP 62
34474: IFFALSE 34490
// Say ( Oswald , D12-Os_sub-1 ) else
34476: LD_EXP 9
34480: PPUSH
34481: LD_STRING D12-Os_sub-1
34483: PPUSH
34484: CALL_OW 88
34488: GO 34502
// Say ( Oswald , D12-Os-1 ) ;
34490: LD_EXP 9
34494: PPUSH
34495: LD_STRING D12-Os-1
34497: PPUSH
34498: CALL_OW 88
// end ; Dwayne :
34502: GO 34530
34504: LD_EXP 8
34508: DOUBLE
34509: EQUAL
34510: IFTRUE 34514
34512: GO 34529
34514: POP
// Say ( Dwayne , D12-Dw-1 ) ; end ;
34515: LD_EXP 8
34519: PPUSH
34520: LD_STRING D12-Dw-1
34522: PPUSH
34523: CALL_OW 88
34527: GO 34530
34529: POP
// if IsOk ( Kurt ) then
34530: LD_EXP 10
34534: PPUSH
34535: CALL_OW 302
34539: IFFALSE 34575
// begin if kurt_is_substitute then
34541: LD_EXP 63
34545: IFFALSE 34561
// Say ( Kurt , D12-Ku_sub-1 ) else
34547: LD_EXP 10
34551: PPUSH
34552: LD_STRING D12-Ku_sub-1
34554: PPUSH
34555: CALL_OW 88
34559: GO 34573
// Say ( Kurt , D12-Ku-1 ) ;
34561: LD_EXP 10
34565: PPUSH
34566: LD_STRING D12-Ku-1
34568: PPUSH
34569: CALL_OW 88
// end else
34573: GO 34587
// Say ( Heike , D12-H-2a ) ;
34575: LD_EXP 7
34579: PPUSH
34580: LD_STRING D12-H-2a
34582: PPUSH
34583: CALL_OW 88
// Say ( Heike , D12-H-3 ) ;
34587: LD_EXP 7
34591: PPUSH
34592: LD_STRING D12-H-3
34594: PPUSH
34595: CALL_OW 88
// dwait ( 0 0$0.5 ) ;
34599: LD_INT 18
34601: PPUSH
34602: CALL_OW 68
// YouLost ( ArtifactGone ) ;
34606: LD_STRING ArtifactGone
34608: PPUSH
34609: CALL_OW 104
// end ; if IsLive ( Gossudarov ) then
34613: LD_EXP 13
34617: PPUSH
34618: CALL_OW 300
34622: IFFALSE 34650
// begin ForceSay ( Gossudarov , D6-a-Gos-1 ) ;
34624: LD_EXP 13
34628: PPUSH
34629: LD_STRING D6-a-Gos-1
34631: PPUSH
34632: CALL_OW 91
// Say ( Oswald , D6-a-Os-1 ) ;
34636: LD_EXP 9
34640: PPUSH
34641: LD_STRING D6-a-Os-1
34643: PPUSH
34644: CALL_OW 88
// end else
34648: GO 34662
// ForceSay ( Heike , D6-a-H-1 ) ;
34650: LD_EXP 7
34654: PPUSH
34655: LD_STRING D6-a-H-1
34657: PPUSH
34658: CALL_OW 91
// ForceSay ( Heike , D6-x-H-1 ) ;
34662: LD_EXP 7
34666: PPUSH
34667: LD_STRING D6-x-H-1
34669: PPUSH
34670: CALL_OW 91
// dialogue_traitors := traitors_under_player_control and gensher_answer <> 1 ;
34674: LD_ADDR_VAR 0 2
34678: PUSH
34679: LD_EXP 102
34683: PUSH
34684: LD_EXP 74
34688: PUSH
34689: LD_INT 1
34691: NONEQUAL
34692: AND
34693: ST_TO_ADDR
// if dialogue_traitors then
34694: LD_VAR 0 2
34698: IFFALSE 34782
// begin SayRadio ( scout , D6-xa-ScoutM-1 ) ;
34700: LD_EXP 14
34704: PPUSH
34705: LD_STRING D6-xa-ScoutM-1
34707: PPUSH
34708: CALL_OW 94
// ForceSay ( Heike , D6-xx-H-1 ) ;
34712: LD_EXP 7
34716: PPUSH
34717: LD_STRING D6-xx-H-1
34719: PPUSH
34720: CALL_OW 91
// SayRadio ( scout , D6-xa-ScoutM-2 ) ;
34724: LD_EXP 14
34728: PPUSH
34729: LD_STRING D6-xa-ScoutM-2
34731: PPUSH
34732: CALL_OW 94
// Say ( Oswald , D6-xx-Os-1 ) ;
34736: LD_EXP 9
34740: PPUSH
34741: LD_STRING D6-xx-Os-1
34743: PPUSH
34744: CALL_OW 88
// ForceSay ( Heike , D6-xx-H-2 ) ;
34748: LD_EXP 7
34752: PPUSH
34753: LD_STRING D6-xx-H-2
34755: PPUSH
34756: CALL_OW 91
// SayRadio ( scout , D6-xa-ScoutM-3 ) ;
34760: LD_EXP 14
34764: PPUSH
34765: LD_STRING D6-xa-ScoutM-3
34767: PPUSH
34768: CALL_OW 94
// scout_pullback = true ;
34772: LD_ADDR_EXP 71
34776: PUSH
34777: LD_INT 1
34779: ST_TO_ADDR
// end else
34780: GO 34854
// begin SayRadio ( Gensher , D6-xb-Ge-1 ) ;
34782: LD_EXP 12
34786: PPUSH
34787: LD_STRING D6-xb-Ge-1
34789: PPUSH
34790: CALL_OW 94
// ForceSay ( Heike , D6-xx-H-1 ) ;
34794: LD_EXP 7
34798: PPUSH
34799: LD_STRING D6-xx-H-1
34801: PPUSH
34802: CALL_OW 91
// SayRadio ( Gensher , D6-xb-Ge-2 ) ;
34806: LD_EXP 12
34810: PPUSH
34811: LD_STRING D6-xb-Ge-2
34813: PPUSH
34814: CALL_OW 94
// Say ( Oswald , D6-xx-Os-1 ) ;
34818: LD_EXP 9
34822: PPUSH
34823: LD_STRING D6-xx-Os-1
34825: PPUSH
34826: CALL_OW 88
// ForceSay ( Heike , D6-xx-H-2 ) ;
34830: LD_EXP 7
34834: PPUSH
34835: LD_STRING D6-xx-H-2
34837: PPUSH
34838: CALL_OW 91
// SayRadio ( Gensher , D6-xb-Ge-3 ) ;
34842: LD_EXP 12
34846: PPUSH
34847: LD_STRING D6-xb-Ge-3
34849: PPUSH
34850: CALL_OW 94
// end ; Say ( Oswald , D6-xx-Os-2 ) ;
34854: LD_EXP 9
34858: PPUSH
34859: LD_STRING D6-xx-Os-2
34861: PPUSH
34862: CALL_OW 88
// if IsLive ( Gossudarov ) then
34866: LD_EXP 13
34870: PPUSH
34871: CALL_OW 300
34875: IFFALSE 34889
// Say ( Heike , D6-xx-H-3 ) ;
34877: LD_EXP 7
34881: PPUSH
34882: LD_STRING D6-xx-H-3
34884: PPUSH
34885: CALL_OW 88
// if russian_prisoners > 0 then
34889: LD_EXP 80
34893: PUSH
34894: LD_INT 0
34896: GREATER
34897: IFFALSE 35098
// begin if IsOk ( Kurt ) then
34899: LD_EXP 10
34903: PPUSH
34904: CALL_OW 302
34908: IFFALSE 34945
// begin if not kurt_is_substitute then
34910: LD_EXP 63
34914: NOT
34915: IFFALSE 34931
// Say ( Kurt , D7-Ku-1 ) else
34917: LD_EXP 10
34921: PPUSH
34922: LD_STRING D7-Ku-1
34924: PPUSH
34925: CALL_OW 88
34929: GO 34943
// Say ( Kurt , D7-Ku_sub-1 ) ;
34931: LD_EXP 10
34935: PPUSH
34936: LD_STRING D7-Ku_sub-1
34938: PPUSH
34939: CALL_OW 88
// end else
34943: GO 34968
// if IsOk ( Dwayne ) then
34945: LD_EXP 8
34949: PPUSH
34950: CALL_OW 302
34954: IFFALSE 34968
// Say ( Dwayne , D7-Dw-1 ) ;
34956: LD_EXP 8
34960: PPUSH
34961: LD_STRING D7-Dw-1
34963: PPUSH
34964: CALL_OW 88
// dwait ( 0 0$0.3 ) ;
34968: LD_INT 10
34970: PPUSH
34971: CALL_OW 68
// russian_prisoners_decision = Query ( QPrisonersFirst ) ;
34975: LD_ADDR_EXP 81
34979: PUSH
34980: LD_STRING QPrisonersFirst
34982: PPUSH
34983: CALL_OW 97
34987: ST_TO_ADDR
// case russian_prisoners_decision of 1 :
34988: LD_EXP 81
34992: PUSH
34993: LD_INT 1
34995: DOUBLE
34996: EQUAL
34997: IFTRUE 35001
34999: GO 35016
35001: POP
// begin ForceSay ( Heike , D7-1-H-1 ) ;
35002: LD_EXP 7
35006: PPUSH
35007: LD_STRING D7-1-H-1
35009: PPUSH
35010: CALL_OW 91
// end ; 2 :
35014: GO 35088
35016: LD_INT 2
35018: DOUBLE
35019: EQUAL
35020: IFTRUE 35024
35022: GO 35064
35024: POP
// begin if IsLive ( Gossudarov ) then
35025: LD_EXP 13
35029: PPUSH
35030: CALL_OW 300
35034: IFFALSE 35050
// ForceSay ( Heike , D7-2a-H-1 ) else
35036: LD_EXP 7
35040: PPUSH
35041: LD_STRING D7-2a-H-1
35043: PPUSH
35044: CALL_OW 91
35048: GO 35062
// ForceSay ( Heike , D7-2b-H-1 ) ;
35050: LD_EXP 7
35054: PPUSH
35055: LD_STRING D7-2b-H-1
35057: PPUSH
35058: CALL_OW 91
// end ; 3 :
35062: GO 35088
35064: LD_INT 3
35066: DOUBLE
35067: EQUAL
35068: IFTRUE 35072
35070: GO 35087
35072: POP
// begin ForceSay ( Heike , D7-3-H-1 ) ;
35073: LD_EXP 7
35077: PPUSH
35078: LD_STRING D7-3-H-1
35080: PPUSH
35081: CALL_OW 91
// end ; end ;
35085: GO 35088
35087: POP
// handle_russian_prisoners_now = true ;
35088: LD_ADDR_EXP 82
35092: PUSH
35093: LD_INT 1
35095: ST_TO_ADDR
// end else
35096: GO 35107
// russian_prisoners_decision = - 1 ;
35098: LD_ADDR_EXP 81
35102: PUSH
35103: LD_INT 1
35105: NEG
35106: ST_TO_ADDR
// dwait ( 0 0$0.2 ) ;
35107: LD_INT 7
35109: PPUSH
35110: CALL_OW 68
// ChangeMissionObjectives ( M2 ) ;
35114: LD_STRING M2
35116: PPUSH
35117: CALL_OW 337
// DialogueOff ;
35121: CALL_OW 7
// ai_bases = [ ] ;
35125: LD_ADDR_EXP 49
35129: PUSH
35130: EMPTY
35131: ST_TO_ADDR
// for val in FilterAllUnits ( [ [ f_side , russians ] , [ f_type , unit_building ] , [ f_inarea , ru_base_area ] ] ) ^ FilterAllUnits ( [ [ f_side , russians ] , [ f_or , [ f_class , class_apeman ] , [ f_class , class_apeman_engineer ] , [ f_class , class_apeman_soldier ] , [ f_class , class_apeman_kamikaze ] ] ] ) do
35132: LD_ADDR_VAR 0 1
35136: PUSH
35137: LD_INT 22
35139: PUSH
35140: LD_EXP 3
35144: PUSH
35145: EMPTY
35146: LIST
35147: LIST
35148: PUSH
35149: LD_INT 21
35151: PUSH
35152: LD_INT 3
35154: PUSH
35155: EMPTY
35156: LIST
35157: LIST
35158: PUSH
35159: LD_INT 95
35161: PUSH
35162: LD_INT 1
35164: PUSH
35165: EMPTY
35166: LIST
35167: LIST
35168: PUSH
35169: EMPTY
35170: LIST
35171: LIST
35172: LIST
35173: PPUSH
35174: CALL_OW 69
35178: PUSH
35179: LD_INT 22
35181: PUSH
35182: LD_EXP 3
35186: PUSH
35187: EMPTY
35188: LIST
35189: LIST
35190: PUSH
35191: LD_INT 2
35193: PUSH
35194: LD_INT 25
35196: PUSH
35197: LD_INT 12
35199: PUSH
35200: EMPTY
35201: LIST
35202: LIST
35203: PUSH
35204: LD_INT 25
35206: PUSH
35207: LD_INT 16
35209: PUSH
35210: EMPTY
35211: LIST
35212: LIST
35213: PUSH
35214: LD_INT 25
35216: PUSH
35217: LD_INT 15
35219: PUSH
35220: EMPTY
35221: LIST
35222: LIST
35223: PUSH
35224: LD_INT 25
35226: PUSH
35227: LD_INT 17
35229: PUSH
35230: EMPTY
35231: LIST
35232: LIST
35233: PUSH
35234: EMPTY
35235: LIST
35236: LIST
35237: LIST
35238: LIST
35239: LIST
35240: PUSH
35241: EMPTY
35242: LIST
35243: LIST
35244: PPUSH
35245: CALL_OW 69
35249: ADD
35250: PUSH
35251: FOR_IN
35252: IFFALSE 35270
// SetSide ( val , you ) ;
35254: LD_VAR 0 1
35258: PPUSH
35259: LD_EXP 2
35263: PPUSH
35264: CALL_OW 235
35268: GO 35251
35270: POP
35271: POP
// ResetRussianDepot ;
35272: CALL 24749 0 0
// engineer_simulation = true ;
35276: LD_ADDR_EXP 87
35280: PUSH
35281: LD_INT 1
35283: ST_TO_ADDR
// if tick - start_tick <= max_player_attack_time then
35284: LD_OWVAR 1
35288: PUSH
35289: LD_EXP 78
35293: MINUS
35294: PUSH
35295: LD_EXP 77
35299: LESSEQUAL
35300: IFFALSE 35320
// begin quick_action = true ;
35302: LD_ADDR_EXP 79
35306: PUSH
35307: LD_INT 1
35309: ST_TO_ADDR
// val = 0 0$0 ;
35310: LD_ADDR_VAR 0 1
35314: PUSH
35315: LD_INT 0
35317: ST_TO_ADDR
// end else
35318: GO 35354
// begin quick_action = false ;
35320: LD_ADDR_EXP 79
35324: PUSH
35325: LD_INT 0
35327: ST_TO_ADDR
// val = ( ( tick - start_tick ) - max_player_attack_time ) div 2 ;
35328: LD_ADDR_VAR 0 1
35332: PUSH
35333: LD_OWVAR 1
35337: PUSH
35338: LD_EXP 78
35342: MINUS
35343: PUSH
35344: LD_EXP 77
35348: MINUS
35349: PUSH
35350: LD_INT 2
35352: DIV
35353: ST_TO_ADDR
// end ; val = [ 31 31$0 , 26 26$0 , 22 22$0 ] [ difficulty ] - val ;
35354: LD_ADDR_VAR 0 1
35358: PUSH
35359: LD_INT 65100
35361: PUSH
35362: LD_INT 54600
35364: PUSH
35365: LD_INT 46200
35367: PUSH
35368: EMPTY
35369: LIST
35370: LIST
35371: LIST
35372: PUSH
35373: LD_OWVAR 67
35377: ARRAY
35378: PUSH
35379: LD_VAR 0 1
35383: MINUS
35384: ST_TO_ADDR
// if val < [ 28 28$0 , 23 23$0 , 19 19$0 ] [ difficulty ] then
35385: LD_VAR 0 1
35389: PUSH
35390: LD_INT 58800
35392: PUSH
35393: LD_INT 48300
35395: PUSH
35396: LD_INT 39900
35398: PUSH
35399: EMPTY
35400: LIST
35401: LIST
35402: LIST
35403: PUSH
35404: LD_OWVAR 67
35408: ARRAY
35409: LESS
35410: IFFALSE 35437
// val = [ 28 28$0 , 23 23$0 , 19 19$0 ] [ difficulty ] ;
35412: LD_ADDR_VAR 0 1
35416: PUSH
35417: LD_INT 58800
35419: PUSH
35420: LD_INT 48300
35422: PUSH
35423: LD_INT 39900
35425: PUSH
35426: EMPTY
35427: LIST
35428: LIST
35429: LIST
35430: PUSH
35431: LD_OWVAR 67
35435: ARRAY
35436: ST_TO_ADDR
// wait ( val div 3 ) ;
35437: LD_VAR 0 1
35441: PUSH
35442: LD_INT 3
35444: DIV
35445: PPUSH
35446: CALL_OW 67
// russians_attack = 1 ;
35450: LD_ADDR_EXP 84
35454: PUSH
35455: LD_INT 1
35457: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
35458: LD_INT 35
35460: PPUSH
35461: CALL_OW 67
// until russians_attack = 2 ;
35465: LD_EXP 84
35469: PUSH
35470: LD_INT 2
35472: EQUAL
35473: IFFALSE 35458
// wait ( val - val div 3 ) ;
35475: LD_VAR 0 1
35479: PUSH
35480: LD_VAR 0 1
35484: PUSH
35485: LD_INT 3
35487: DIV
35488: MINUS
35489: PPUSH
35490: CALL_OW 67
// DialogueOn ;
35494: CALL_OW 6
// if dialogue_traitors then
35498: LD_VAR 0 2
35502: IFFALSE 35530
// begin SayRadio ( scout , D6-xa-ScoutM-4 ) ;
35504: LD_EXP 14
35508: PPUSH
35509: LD_STRING D6-xa-ScoutM-4
35511: PPUSH
35512: CALL_OW 94
// Say ( Heike , D6-xa-H-1 ) ;
35516: LD_EXP 7
35520: PPUSH
35521: LD_STRING D6-xa-H-1
35523: PPUSH
35524: CALL_OW 88
// end else
35528: GO 35542
// begin SayRadio ( Gensher , D6-xb-Ge-4 ) ;
35530: LD_EXP 12
35534: PPUSH
35535: LD_STRING D6-xb-Ge-4
35537: PPUSH
35538: CALL_OW 94
// end ; DialogueOff ;
35542: CALL_OW 7
// wait ( 1 1$0 ) ;
35546: LD_INT 2100
35548: PPUSH
35549: CALL_OW 67
// russians_attack = 3 ;
35553: LD_ADDR_EXP 84
35557: PUSH
35558: LD_INT 3
35560: ST_TO_ADDR
// end ;
35561: PPOPN 3
35563: END
// function ListWithoutApemen ( list ) ; begin
35564: LD_INT 0
35566: PPUSH
// result = UnitFilter ( list , [ [ f_not , [ f_class , class_apeman ] ] , [ f_not , [ f_class , class_apeman_engineer ] ] , [ f_not , [ f_class , class_apeman_soldier ] ] , [ f_not , [ f_class , class_apeman_kamikaze ] ] ] ) ;
35567: LD_ADDR_VAR 0 2
35571: PUSH
35572: LD_VAR 0 1
35576: PPUSH
35577: LD_INT 3
35579: PUSH
35580: LD_INT 25
35582: PUSH
35583: LD_INT 12
35585: PUSH
35586: EMPTY
35587: LIST
35588: LIST
35589: PUSH
35590: EMPTY
35591: LIST
35592: LIST
35593: PUSH
35594: LD_INT 3
35596: PUSH
35597: LD_INT 25
35599: PUSH
35600: LD_INT 16
35602: PUSH
35603: EMPTY
35604: LIST
35605: LIST
35606: PUSH
35607: EMPTY
35608: LIST
35609: LIST
35610: PUSH
35611: LD_INT 3
35613: PUSH
35614: LD_INT 25
35616: PUSH
35617: LD_INT 15
35619: PUSH
35620: EMPTY
35621: LIST
35622: LIST
35623: PUSH
35624: EMPTY
35625: LIST
35626: LIST
35627: PUSH
35628: LD_INT 3
35630: PUSH
35631: LD_INT 25
35633: PUSH
35634: LD_INT 17
35636: PUSH
35637: EMPTY
35638: LIST
35639: LIST
35640: PUSH
35641: EMPTY
35642: LIST
35643: LIST
35644: PUSH
35645: EMPTY
35646: LIST
35647: LIST
35648: LIST
35649: LIST
35650: PPUSH
35651: CALL_OW 72
35655: ST_TO_ADDR
// end ;
35656: LD_VAR 0 2
35660: RET
// every 0 0$1 + 0 0$0.8 trigger engineer_simulation do var temp_list , i ;
35661: LD_EXP 87
35665: IFFALSE 35822
35667: GO 35669
35669: DISABLE
35670: LD_INT 0
35672: PPUSH
35673: PPUSH
// begin if IsOk ( ai_depot [ 1 ] ) then
35674: LD_EXP 23
35678: PUSH
35679: LD_INT 1
35681: ARRAY
35682: PPUSH
35683: CALL_OW 302
35687: IFFALSE 35691
// exit ;
35689: GO 35822
// Query ( QEngineerChange ) ;
35691: LD_STRING QEngineerChange
35693: PPUSH
35694: CALL_OW 97
// SetAreaMapShow ( engineer_change_area , 2 ) ;
35698: LD_INT 13
35700: PPUSH
35701: LD_INT 2
35703: PPUSH
35704: CALL_OW 424
// repeat wait ( 0 0$0.5 ) ;
35708: LD_INT 18
35710: PPUSH
35711: CALL_OW 67
// temp_list = ListWithoutApemen ( FilterAllUnits ( [ [ f_side , you ] , [ f_inarea , engineer_change_area ] , [ f_ok ] ] ) ) ;
35715: LD_ADDR_VAR 0 1
35719: PUSH
35720: LD_INT 22
35722: PUSH
35723: LD_EXP 2
35727: PUSH
35728: EMPTY
35729: LIST
35730: LIST
35731: PUSH
35732: LD_INT 95
35734: PUSH
35735: LD_INT 13
35737: PUSH
35738: EMPTY
35739: LIST
35740: LIST
35741: PUSH
35742: LD_INT 50
35744: PUSH
35745: EMPTY
35746: LIST
35747: PUSH
35748: EMPTY
35749: LIST
35750: LIST
35751: LIST
35752: PPUSH
35753: CALL_OW 69
35757: PPUSH
35758: CALL 35564 0 1
35762: ST_TO_ADDR
// for i in temp_list do
35763: LD_ADDR_VAR 0 2
35767: PUSH
35768: LD_VAR 0 1
35772: PUSH
35773: FOR_IN
35774: IFFALSE 35816
// if i in starting_humans then
35776: LD_VAR 0 2
35780: PUSH
35781: LD_EXP 85
35785: IN
35786: IFFALSE 35814
// begin SetClass ( i , class_engineer ) ;
35788: LD_VAR 0 2
35792: PPUSH
35793: LD_INT 2
35795: PPUSH
35796: CALL_OW 336
// SetAreaMapShow ( engineer_change_area , 0 ) ;
35800: LD_INT 13
35802: PPUSH
35803: LD_INT 0
35805: PPUSH
35806: CALL_OW 424
// exit ;
35810: POP
35811: POP
35812: GO 35822
// end ;
35814: GO 35773
35816: POP
35817: POP
// until false ;
35818: LD_INT 0
35820: IFFALSE 35708
// end ;
35822: PPOPN 2
35824: END
// every 0 0$1 + 0 0$0.3 do var i , units_list , temp_list , temp_unit , temp_value , temp_list_2 , k , humans_needing_healing , scis_present , time ; var temp_list_3 , temp_list_4 ; var vehicles_drivers , everyone_was_in_depot , attack_cooldown , detect_attack_cooldown ;
35825: GO 35827
35827: DISABLE
35828: LD_INT 0
35830: PPUSH
35831: PPUSH
35832: PPUSH
35833: PPUSH
35834: PPUSH
35835: PPUSH
35836: PPUSH
35837: PPUSH
35838: PPUSH
35839: PPUSH
35840: PPUSH
35841: PPUSH
35842: PPUSH
35843: PPUSH
35844: PPUSH
35845: PPUSH
// begin vehicles_drivers = [ ] ;
35846: LD_ADDR_VAR 0 13
35850: PUSH
35851: EMPTY
35852: ST_TO_ADDR
// everyone_was_in_depot = false ;
35853: LD_ADDR_VAR 0 14
35857: PUSH
35858: LD_INT 0
35860: ST_TO_ADDR
// attack_cooldown = 0 0$12 ;
35861: LD_ADDR_VAR 0 15
35865: PUSH
35866: LD_INT 420
35868: ST_TO_ADDR
// detect_attack_cooldown = 0 0$5 ;
35869: LD_ADDR_VAR 0 16
35873: PUSH
35874: LD_INT 175
35876: ST_TO_ADDR
// repeat if russian_prisoners_decision = 2 then
35877: LD_EXP 81
35881: PUSH
35882: LD_INT 2
35884: EQUAL
35885: IFFALSE 35897
// time = 0 0$0.1 else
35887: LD_ADDR_VAR 0 10
35891: PUSH
35892: LD_INT 4
35894: ST_TO_ADDR
35895: GO 35905
// time = 0 0$0.8 ;
35897: LD_ADDR_VAR 0 10
35901: PUSH
35902: LD_INT 28
35904: ST_TO_ADDR
// i = 0 ;
35905: LD_ADDR_VAR 0 1
35909: PUSH
35910: LD_INT 0
35912: ST_TO_ADDR
// repeat wait ( 1 ) ;
35913: LD_INT 1
35915: PPUSH
35916: CALL_OW 67
// i = i + 1 ;
35920: LD_ADDR_VAR 0 1
35924: PUSH
35925: LD_VAR 0 1
35929: PUSH
35930: LD_INT 1
35932: PLUS
35933: ST_TO_ADDR
// until i >= time or handle_russian_prisoners_now ;
35934: LD_VAR 0 1
35938: PUSH
35939: LD_VAR 0 10
35943: GREATEREQUAL
35944: PUSH
35945: LD_EXP 82
35949: OR
35950: IFFALSE 35913
// handle_russian_prisoners_now = false ;
35952: LD_ADDR_EXP 82
35956: PUSH
35957: LD_INT 0
35959: ST_TO_ADDR
// case russian_prisoners_decision of - 1 :
35960: LD_EXP 81
35964: PUSH
35965: LD_INT 1
35967: NEG
35968: DOUBLE
35969: EQUAL
35970: IFTRUE 35974
35972: GO 35979
35974: POP
// exit ; 0 :
35975: GO 39092
35977: GO 35993
35979: LD_INT 0
35981: DOUBLE
35982: EQUAL
35983: IFTRUE 35987
35985: GO 35992
35987: POP
// continue ; end ;
35988: GO 35877
35990: GO 35993
35992: POP
// if russian_prisoners = 0 then
35993: LD_EXP 80
35997: PUSH
35998: LD_INT 0
36000: EQUAL
36001: IFFALSE 36005
// exit ;
36003: GO 39092
// if attack_cooldown > 0 0$0 then
36005: LD_VAR 0 15
36009: PUSH
36010: LD_INT 0
36012: GREATER
36013: IFFALSE 36031
// attack_cooldown = attack_cooldown - time ;
36015: LD_ADDR_VAR 0 15
36019: PUSH
36020: LD_VAR 0 15
36024: PUSH
36025: LD_VAR 0 10
36029: MINUS
36030: ST_TO_ADDR
// temp_value = false ;
36031: LD_ADDR_VAR 0 5
36035: PUSH
36036: LD_INT 0
36038: ST_TO_ADDR
// if attack_cooldown <= 0 0$0 then
36039: LD_VAR 0 15
36043: PUSH
36044: LD_INT 0
36046: LESSEQUAL
36047: IFFALSE 36115
// begin temp_list = FilterAllUnits ( [ f_side , you ] ) ;
36049: LD_ADDR_VAR 0 3
36053: PUSH
36054: LD_INT 22
36056: PUSH
36057: LD_EXP 2
36061: PUSH
36062: EMPTY
36063: LIST
36064: LIST
36065: PPUSH
36066: CALL_OW 69
36070: ST_TO_ADDR
// for i in russian_prisoners do
36071: LD_ADDR_VAR 0 1
36075: PUSH
36076: LD_EXP 80
36080: PUSH
36081: FOR_IN
36082: IFFALSE 36113
// if UnitShoot ( i ) in temp_list then
36084: LD_VAR 0 1
36088: PPUSH
36089: CALL_OW 504
36093: PUSH
36094: LD_VAR 0 3
36098: IN
36099: IFFALSE 36111
// begin temp_value = true ;
36101: LD_ADDR_VAR 0 5
36105: PUSH
36106: LD_INT 1
36108: ST_TO_ADDR
// break ;
36109: GO 36113
// end ;
36111: GO 36081
36113: POP
36114: POP
// end ; if detect_attack_cooldown > 0 0$0 then
36115: LD_VAR 0 16
36119: PUSH
36120: LD_INT 0
36122: GREATER
36123: IFFALSE 36141
// detect_attack_cooldown = detect_attack_cooldown - time ;
36125: LD_ADDR_VAR 0 16
36129: PUSH
36130: LD_VAR 0 16
36134: PUSH
36135: LD_VAR 0 10
36139: MINUS
36140: ST_TO_ADDR
// if detect_attack_cooldown <= 0 0$0 and russian_prisoners_decision = 2 and ( ContactTime ( [ you , russians_alt ] ) <= 0 0$2 or temp_value ) then
36141: LD_VAR 0 16
36145: PUSH
36146: LD_INT 0
36148: LESSEQUAL
36149: PUSH
36150: LD_EXP 81
36154: PUSH
36155: LD_INT 2
36157: EQUAL
36158: AND
36159: PUSH
36160: LD_EXP 2
36164: PUSH
36165: LD_EXP 6
36169: PUSH
36170: EMPTY
36171: LIST
36172: LIST
36173: PPUSH
36174: CALL_OW 462
36178: PUSH
36179: LD_INT 70
36181: LESSEQUAL
36182: PUSH
36183: LD_VAR 0 5
36187: OR
36188: AND
36189: IFFALSE 36260
// begin russian_prisoners_decision = 1 ;
36191: LD_ADDR_EXP 81
36195: PUSH
36196: LD_INT 1
36198: ST_TO_ADDR
// DialogueOn ;
36199: CALL_OW 6
// if GetSex ( russian_prisoners [ 1 ] ) = sex_male then
36203: LD_EXP 80
36207: PUSH
36208: LD_INT 1
36210: ARRAY
36211: PPUSH
36212: CALL_OW 258
36216: PUSH
36217: LD_INT 1
36219: EQUAL
36220: IFFALSE 36240
// Say ( russian_prisoners [ 1 ] , D7-21-RuM-1 ) else
36222: LD_EXP 80
36226: PUSH
36227: LD_INT 1
36229: ARRAY
36230: PPUSH
36231: LD_STRING D7-21-RuM-1
36233: PPUSH
36234: CALL_OW 88
36238: GO 36256
// Say ( russian_prisoners [ 1 ] , D7-21-RuF-1 ) ;
36240: LD_EXP 80
36244: PUSH
36245: LD_INT 1
36247: ARRAY
36248: PPUSH
36249: LD_STRING D7-21-RuF-1
36251: PPUSH
36252: CALL_OW 88
// DialogueOff ;
36256: CALL_OW 7
// end ; humans_needing_healing = [ ] ;
36260: LD_ADDR_VAR 0 8
36264: PUSH
36265: EMPTY
36266: ST_TO_ADDR
// scis_present = [ ] ;
36267: LD_ADDR_VAR 0 9
36271: PUSH
36272: EMPTY
36273: ST_TO_ADDR
// disable_gossudarov_single_control = false ;
36274: LD_ADDR_EXP 89
36278: PUSH
36279: LD_INT 0
36281: ST_TO_ADDR
// case russian_prisoners_decision of 1 :
36282: LD_EXP 81
36286: PUSH
36287: LD_INT 1
36289: DOUBLE
36290: EQUAL
36291: IFTRUE 36295
36293: GO 37633
36295: POP
// begin for i in UnitFilter ( russian_prisoners , [ f_not , [ f_side , russians ] ] ) do
36296: LD_ADDR_VAR 0 1
36300: PUSH
36301: LD_EXP 80
36305: PPUSH
36306: LD_INT 3
36308: PUSH
36309: LD_INT 22
36311: PUSH
36312: LD_EXP 3
36316: PUSH
36317: EMPTY
36318: LIST
36319: LIST
36320: PUSH
36321: EMPTY
36322: LIST
36323: LIST
36324: PPUSH
36325: CALL_OW 72
36329: PUSH
36330: FOR_IN
36331: IFFALSE 36349
// SetSide ( i , russians ) ;
36333: LD_VAR 0 1
36337: PPUSH
36338: LD_EXP 3
36342: PPUSH
36343: CALL_OW 235
36347: GO 36330
36349: POP
36350: POP
// for i in vehicle_captured_events do
36351: LD_ADDR_VAR 0 1
36355: PUSH
36356: LD_EXP 103
36360: PUSH
36361: FOR_IN
36362: IFFALSE 36468
// if vehicles_drivers >= i [ 1 ] then
36364: LD_VAR 0 13
36368: PUSH
36369: LD_VAR 0 1
36373: PUSH
36374: LD_INT 1
36376: ARRAY
36377: GREATEREQUAL
36378: IFFALSE 36466
// if vehicles_drivers [ i [ 1 ] ] > 0 then
36380: LD_VAR 0 13
36384: PUSH
36385: LD_VAR 0 1
36389: PUSH
36390: LD_INT 1
36392: ARRAY
36393: ARRAY
36394: PUSH
36395: LD_INT 0
36397: GREATER
36398: IFFALSE 36466
// begin vehicles_drivers = Replace ( vehicles_drivers , i [ 2 ] , vehicles_drivers [ i [ 1 ] ] ) ;
36400: LD_ADDR_VAR 0 13
36404: PUSH
36405: LD_VAR 0 13
36409: PPUSH
36410: LD_VAR 0 1
36414: PUSH
36415: LD_INT 2
36417: ARRAY
36418: PPUSH
36419: LD_VAR 0 13
36423: PUSH
36424: LD_VAR 0 1
36428: PUSH
36429: LD_INT 1
36431: ARRAY
36432: ARRAY
36433: PPUSH
36434: CALL_OW 1
36438: ST_TO_ADDR
// vehicles_drivers = Replace ( vehicles_drivers , i [ 1 ] , 0 ) ;
36439: LD_ADDR_VAR 0 13
36443: PUSH
36444: LD_VAR 0 13
36448: PPUSH
36449: LD_VAR 0 1
36453: PUSH
36454: LD_INT 1
36456: ARRAY
36457: PPUSH
36458: LD_INT 0
36460: PPUSH
36461: CALL_OW 1
36465: ST_TO_ADDR
// end ;
36466: GO 36361
36468: POP
36469: POP
// vehicle_captured_events = [ ] ;
36470: LD_ADDR_EXP 103
36474: PUSH
36475: EMPTY
36476: ST_TO_ADDR
// units_list = russian_prisoners ;
36477: LD_ADDR_VAR 0 2
36481: PUSH
36482: LD_EXP 80
36486: ST_TO_ADDR
// for i = 1 to vehicles_drivers + 0 do
36487: LD_ADDR_VAR 0 1
36491: PUSH
36492: DOUBLE
36493: LD_INT 1
36495: DEC
36496: ST_TO_ADDR
36497: LD_VAR 0 13
36501: PUSH
36502: LD_INT 0
36504: PLUS
36505: PUSH
36506: FOR_TO
36507: IFFALSE 36877
// begin if vehicles_drivers [ i ] > 0 then
36509: LD_VAR 0 13
36513: PUSH
36514: LD_VAR 0 1
36518: ARRAY
36519: PUSH
36520: LD_INT 0
36522: GREATER
36523: IFFALSE 36578
// if not IsOk ( i ) or not IsOk ( vehicles_drivers [ i ] ) then
36525: LD_VAR 0 1
36529: PPUSH
36530: CALL_OW 302
36534: NOT
36535: PUSH
36536: LD_VAR 0 13
36540: PUSH
36541: LD_VAR 0 1
36545: ARRAY
36546: PPUSH
36547: CALL_OW 302
36551: NOT
36552: OR
36553: IFFALSE 36578
// vehicles_drivers = Replace ( vehicles_drivers , i , 0 ) ;
36555: LD_ADDR_VAR 0 13
36559: PUSH
36560: LD_VAR 0 13
36564: PPUSH
36565: LD_VAR 0 1
36569: PPUSH
36570: LD_INT 0
36572: PPUSH
36573: CALL_OW 1
36577: ST_TO_ADDR
// if vehicles_drivers [ i ] = 0 then
36578: LD_VAR 0 13
36582: PUSH
36583: LD_VAR 0 1
36587: ARRAY
36588: PUSH
36589: LD_INT 0
36591: EQUAL
36592: IFFALSE 36596
// continue ;
36594: GO 36506
// units_list = units_list diff vehicles_drivers [ i ] ;
36596: LD_ADDR_VAR 0 2
36600: PUSH
36601: LD_VAR 0 2
36605: PUSH
36606: LD_VAR 0 13
36610: PUSH
36611: LD_VAR 0 1
36615: ARRAY
36616: DIFF
36617: ST_TO_ADDR
// temp_list = UnitsInside ( i ) ;
36618: LD_ADDR_VAR 0 3
36622: PUSH
36623: LD_VAR 0 1
36627: PPUSH
36628: CALL_OW 313
36632: ST_TO_ADDR
// if temp_list = 0 then
36633: LD_VAR 0 3
36637: PUSH
36638: LD_INT 0
36640: EQUAL
36641: IFFALSE 36812
// begin temp_unit = IsInUnit ( vehicles_drivers [ i ] ) ;
36643: LD_ADDR_VAR 0 4
36647: PUSH
36648: LD_VAR 0 13
36652: PUSH
36653: LD_VAR 0 1
36657: ARRAY
36658: PPUSH
36659: CALL_OW 310
36663: ST_TO_ADDR
// if temp_unit = 0 then
36664: LD_VAR 0 4
36668: PUSH
36669: LD_INT 0
36671: EQUAL
36672: IFFALSE 36696
// ComEnterUnit ( vehicles_drivers [ i ] , i ) else
36674: LD_VAR 0 13
36678: PUSH
36679: LD_VAR 0 1
36683: ARRAY
36684: PPUSH
36685: LD_VAR 0 1
36689: PPUSH
36690: CALL_OW 120
36694: GO 36810
// if temp_unit <> i then
36696: LD_VAR 0 4
36700: PUSH
36701: LD_VAR 0 1
36705: NONEQUAL
36706: IFFALSE 36810
// begin case GetType ( temp_unit ) of unit_building :
36708: LD_VAR 0 4
36712: PPUSH
36713: CALL_OW 247
36717: PUSH
36718: LD_INT 3
36720: DOUBLE
36721: EQUAL
36722: IFTRUE 36726
36724: GO 36744
36726: POP
// ComExitBuilding ( vehicles_drivers [ i ] ) ; unit_vehicle :
36727: LD_VAR 0 13
36731: PUSH
36732: LD_VAR 0 1
36736: ARRAY
36737: PPUSH
36738: CALL_OW 122
36742: GO 36810
36744: LD_INT 2
36746: DOUBLE
36747: EQUAL
36748: IFTRUE 36752
36750: GO 36809
36752: POP
// begin vehicles_drivers = Replace ( vehicles_drivers , temp_unit , vehicles_drivers [ i ] ) ;
36753: LD_ADDR_VAR 0 13
36757: PUSH
36758: LD_VAR 0 13
36762: PPUSH
36763: LD_VAR 0 4
36767: PPUSH
36768: LD_VAR 0 13
36772: PUSH
36773: LD_VAR 0 1
36777: ARRAY
36778: PPUSH
36779: CALL_OW 1
36783: ST_TO_ADDR
// vehicles_drivers = Replace ( vehicles_drivers , i , 0 ) ;
36784: LD_ADDR_VAR 0 13
36788: PUSH
36789: LD_VAR 0 13
36793: PPUSH
36794: LD_VAR 0 1
36798: PPUSH
36799: LD_INT 0
36801: PPUSH
36802: CALL_OW 1
36806: ST_TO_ADDR
// end ; end ;
36807: GO 36810
36809: POP
// end ; end else
36810: GO 36875
// if temp_list [ 1 ] = vehicles_drivers [ i ] then
36812: LD_VAR 0 3
36816: PUSH
36817: LD_INT 1
36819: ARRAY
36820: PUSH
36821: LD_VAR 0 13
36825: PUSH
36826: LD_VAR 0 1
36830: ARRAY
36831: EQUAL
36832: IFFALSE 36852
// units_list = units_list ^ i else
36834: LD_ADDR_VAR 0 2
36838: PUSH
36839: LD_VAR 0 2
36843: PUSH
36844: LD_VAR 0 1
36848: ADD
36849: ST_TO_ADDR
36850: GO 36875
// vehicles_drivers = Replace ( vehicles_drivers , i , 0 ) ;
36852: LD_ADDR_VAR 0 13
36856: PUSH
36857: LD_VAR 0 13
36861: PPUSH
36862: LD_VAR 0 1
36866: PPUSH
36867: LD_INT 0
36869: PPUSH
36870: CALL_OW 1
36874: ST_TO_ADDR
// end ;
36875: GO 36506
36877: POP
36878: POP
// for i in units_list do
36879: LD_ADDR_VAR 0 1
36883: PUSH
36884: LD_VAR 0 2
36888: PUSH
36889: FOR_IN
36890: IFFALSE 37629
// begin if GetType ( i ) = unit_human then
36892: LD_VAR 0 1
36896: PPUSH
36897: CALL_OW 247
36901: PUSH
36902: LD_INT 1
36904: EQUAL
36905: IFFALSE 37142
// begin if GetType ( IsInUnit ( i ) ) = unit_building then
36907: LD_VAR 0 1
36911: PPUSH
36912: CALL_OW 310
36916: PPUSH
36917: CALL_OW 247
36921: PUSH
36922: LD_INT 3
36924: EQUAL
36925: IFFALSE 36938
// begin ComExitBuilding ( i ) ;
36927: LD_VAR 0 1
36931: PPUSH
36932: CALL_OW 122
// continue ;
36936: GO 36889
// end ; temp_list = EmptyWarVehicles ( i , 10 , true ) ;
36938: LD_ADDR_VAR 0 3
36942: PUSH
36943: LD_VAR 0 1
36947: PPUSH
36948: LD_INT 10
36950: PPUSH
36951: LD_INT 1
36953: PPUSH
36954: CALL 39817 0 3
36958: ST_TO_ADDR
// if temp_list > 0 then
36959: LD_VAR 0 3
36963: PUSH
36964: LD_INT 0
36966: GREATER
36967: IFFALSE 37035
// for k = 1 to vehicles_drivers do
36969: LD_ADDR_VAR 0 7
36973: PUSH
36974: DOUBLE
36975: LD_INT 1
36977: DEC
36978: ST_TO_ADDR
36979: LD_VAR 0 13
36983: PUSH
36984: FOR_TO
36985: IFFALSE 37033
// if vehicles_drivers [ k ] > 0 then
36987: LD_VAR 0 13
36991: PUSH
36992: LD_VAR 0 7
36996: ARRAY
36997: PUSH
36998: LD_INT 0
37000: GREATER
37001: IFFALSE 37031
// begin temp_list = temp_list diff k ;
37003: LD_ADDR_VAR 0 3
37007: PUSH
37008: LD_VAR 0 3
37012: PUSH
37013: LD_VAR 0 7
37017: DIFF
37018: ST_TO_ADDR
// if temp_list = 0 then
37019: LD_VAR 0 3
37023: PUSH
37024: LD_INT 0
37026: EQUAL
37027: IFFALSE 37031
// break ;
37029: GO 37033
// end ;
37031: GO 36984
37033: POP
37034: POP
// if temp_list > 0 then
37035: LD_VAR 0 3
37039: PUSH
37040: LD_INT 0
37042: GREATER
37043: IFFALSE 37142
// begin temp_list_2 = [ ] ;
37045: LD_ADDR_VAR 0 6
37049: PUSH
37050: EMPTY
37051: ST_TO_ADDR
// for k in temp_list do
37052: LD_ADDR_VAR 0 7
37056: PUSH
37057: LD_VAR 0 3
37061: PUSH
37062: FOR_IN
37063: IFFALSE 37093
// temp_list_2 = temp_list_2 ^ GetDistUnits ( k , i ) ;
37065: LD_ADDR_VAR 0 6
37069: PUSH
37070: LD_VAR 0 6
37074: PUSH
37075: LD_VAR 0 7
37079: PPUSH
37080: LD_VAR 0 1
37084: PPUSH
37085: CALL_OW 296
37089: ADD
37090: ST_TO_ADDR
37091: GO 37062
37093: POP
37094: POP
// temp_unit = WorstFromListByList ( temp_list , temp_list_2 ) ;
37095: LD_ADDR_VAR 0 4
37099: PUSH
37100: LD_VAR 0 3
37104: PPUSH
37105: LD_VAR 0 6
37109: PPUSH
37110: CALL_OW 78
37114: ST_TO_ADDR
// vehicles_drivers = Replace ( vehicles_drivers , temp_unit , i ) ;
37115: LD_ADDR_VAR 0 13
37119: PUSH
37120: LD_VAR 0 13
37124: PPUSH
37125: LD_VAR 0 4
37129: PPUSH
37130: LD_VAR 0 1
37134: PPUSH
37135: CALL_OW 1
37139: ST_TO_ADDR
// continue ;
37140: GO 36889
// end ; end ; if not IsInArea ( i , ru_base_area ) then
37142: LD_VAR 0 1
37146: PPUSH
37147: LD_INT 1
37149: PPUSH
37150: CALL_OW 308
37154: NOT
37155: IFFALSE 37194
// begin ComAgressiveMove ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] ) ;
37157: LD_VAR 0 1
37161: PPUSH
37162: LD_EXP 31
37166: PUSH
37167: LD_INT 1
37169: ARRAY
37170: PUSH
37171: LD_INT 1
37173: ARRAY
37174: PPUSH
37175: LD_EXP 31
37179: PUSH
37180: LD_INT 1
37182: ARRAY
37183: PUSH
37184: LD_INT 2
37186: ARRAY
37187: PPUSH
37188: CALL_OW 114
// end else
37192: GO 37627
// begin temp_list = FilterAllUnits ( [ [ f_enemy , russians ] , [ f_type , unit_human ] , [ f_dist , i , 14 ] , [ f_see , russians ] ] ) ;
37194: LD_ADDR_VAR 0 3
37198: PUSH
37199: LD_INT 81
37201: PUSH
37202: LD_EXP 3
37206: PUSH
37207: EMPTY
37208: LIST
37209: LIST
37210: PUSH
37211: LD_INT 21
37213: PUSH
37214: LD_INT 1
37216: PUSH
37217: EMPTY
37218: LIST
37219: LIST
37220: PUSH
37221: LD_INT 91
37223: PUSH
37224: LD_VAR 0 1
37228: PUSH
37229: LD_INT 14
37231: PUSH
37232: EMPTY
37233: LIST
37234: LIST
37235: LIST
37236: PUSH
37237: LD_INT 101
37239: PUSH
37240: LD_EXP 3
37244: PUSH
37245: EMPTY
37246: LIST
37247: LIST
37248: PUSH
37249: EMPTY
37250: LIST
37251: LIST
37252: LIST
37253: LIST
37254: PPUSH
37255: CALL_OW 69
37259: ST_TO_ADDR
// if temp_list > 0 then
37260: LD_VAR 0 3
37264: PUSH
37265: LD_INT 0
37267: GREATER
37268: IFFALSE 37404
// begin temp_list_2 = UnitFilter ( temp_list , [ f_not , [ f_lives , 250 ] ] ) ;
37270: LD_ADDR_VAR 0 6
37274: PUSH
37275: LD_VAR 0 3
37279: PPUSH
37280: LD_INT 3
37282: PUSH
37283: LD_INT 24
37285: PUSH
37286: LD_INT 250
37288: PUSH
37289: EMPTY
37290: LIST
37291: LIST
37292: PUSH
37293: EMPTY
37294: LIST
37295: LIST
37296: PPUSH
37297: CALL_OW 72
37301: ST_TO_ADDR
// if temp_list_2 > 0 then
37302: LD_VAR 0 6
37306: PUSH
37307: LD_INT 0
37309: GREATER
37310: IFFALSE 37322
// temp_list = temp_list_2 ;
37312: LD_ADDR_VAR 0 3
37316: PUSH
37317: LD_VAR 0 6
37321: ST_TO_ADDR
// temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
37322: LD_ADDR_VAR 0 4
37326: PUSH
37327: LD_VAR 0 3
37331: PPUSH
37332: LD_VAR 0 1
37336: PPUSH
37337: CALL_OW 75
37341: ST_TO_ADDR
// if GetLives ( temp_unit ) > 250 then
37342: LD_VAR 0 4
37346: PPUSH
37347: CALL_OW 256
37351: PUSH
37352: LD_INT 250
37354: GREATER
37355: IFFALSE 37388
// ComAgressiveMove ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
37357: LD_VAR 0 1
37361: PPUSH
37362: LD_VAR 0 4
37366: PPUSH
37367: CALL_OW 250
37371: PPUSH
37372: LD_VAR 0 4
37376: PPUSH
37377: CALL_OW 251
37381: PPUSH
37382: CALL_OW 114
37386: GO 37402
// ComAttackUnit ( i , temp_unit ) ;
37388: LD_VAR 0 1
37392: PPUSH
37393: LD_VAR 0 4
37397: PPUSH
37398: CALL_OW 115
// end else
37402: GO 37627
// begin temp_list = FindNonhumansNearUnit ( russians , i , 20 , true ) ;
37404: LD_ADDR_VAR 0 3
37408: PUSH
37409: LD_EXP 3
37413: PPUSH
37414: LD_VAR 0 1
37418: PPUSH
37419: LD_INT 20
37421: PPUSH
37422: LD_INT 1
37424: PPUSH
37425: CALL 46987 0 4
37429: ST_TO_ADDR
// if temp_list > 0 then
37430: LD_VAR 0 3
37434: PUSH
37435: LD_INT 0
37437: GREATER
37438: IFFALSE 37479
// begin ComAgressiveMove ( i , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) ) ;
37440: LD_VAR 0 1
37444: PPUSH
37445: LD_VAR 0 3
37449: PUSH
37450: LD_INT 1
37452: ARRAY
37453: PPUSH
37454: CALL_OW 250
37458: PPUSH
37459: LD_VAR 0 3
37463: PUSH
37464: LD_INT 1
37466: ARRAY
37467: PPUSH
37468: CALL_OW 251
37472: PPUSH
37473: CALL_OW 114
// end else
37477: GO 37627
// begin temp_list = FindNonhumansNearUnit ( russians , i , 20 , false ) ;
37479: LD_ADDR_VAR 0 3
37483: PUSH
37484: LD_EXP 3
37488: PPUSH
37489: LD_VAR 0 1
37493: PPUSH
37494: LD_INT 20
37496: PPUSH
37497: LD_INT 0
37499: PPUSH
37500: CALL 46987 0 4
37504: ST_TO_ADDR
// if temp_list > 0 then
37505: LD_VAR 0 3
37509: PUSH
37510: LD_INT 0
37512: GREATER
37513: IFFALSE 37551
// begin temp_unit = NearestUnitToUnit ( temp_list , i ) ;
37515: LD_ADDR_VAR 0 4
37519: PUSH
37520: LD_VAR 0 3
37524: PPUSH
37525: LD_VAR 0 1
37529: PPUSH
37530: CALL_OW 74
37534: ST_TO_ADDR
// ComAttackUnit ( i , temp_unit ) ;
37535: LD_VAR 0 1
37539: PPUSH
37540: LD_VAR 0 4
37544: PPUSH
37545: CALL_OW 115
// end else
37549: GO 37627
// if GetDistUnitXY ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] ) > 5 then
37551: LD_VAR 0 1
37555: PPUSH
37556: LD_EXP 31
37560: PUSH
37561: LD_INT 1
37563: ARRAY
37564: PUSH
37565: LD_INT 1
37567: ARRAY
37568: PPUSH
37569: LD_EXP 31
37573: PUSH
37574: LD_INT 1
37576: ARRAY
37577: PUSH
37578: LD_INT 2
37580: ARRAY
37581: PPUSH
37582: CALL_OW 297
37586: PUSH
37587: LD_INT 5
37589: GREATER
37590: IFFALSE 37627
// ComAgressiveMove ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] ) ;
37592: LD_VAR 0 1
37596: PPUSH
37597: LD_EXP 31
37601: PUSH
37602: LD_INT 1
37604: ARRAY
37605: PUSH
37606: LD_INT 1
37608: ARRAY
37609: PPUSH
37610: LD_EXP 31
37614: PUSH
37615: LD_INT 1
37617: ARRAY
37618: PUSH
37619: LD_INT 2
37621: ARRAY
37622: PPUSH
37623: CALL_OW 114
// end ; end ; end ; end ;
37627: GO 36889
37629: POP
37630: POP
// end ; 2 :
37631: GO 38450
37633: LD_INT 2
37635: DOUBLE
37636: EQUAL
37637: IFTRUE 37641
37639: GO 38189
37641: POP
// begin temp_list = FindPrisonersNeedingHealing ( 999 ) ;
37642: LD_ADDR_VAR 0 3
37646: PUSH
37647: LD_INT 999
37649: PPUSH
37650: CALL 40015 0 1
37654: ST_TO_ADDR
// humans_needing_healing = temp_list [ 1 ] ;
37655: LD_ADDR_VAR 0 8
37659: PUSH
37660: LD_VAR 0 3
37664: PUSH
37665: LD_INT 1
37667: ARRAY
37668: ST_TO_ADDR
// scis_present = temp_list [ 2 ] ;
37669: LD_ADDR_VAR 0 9
37673: PUSH
37674: LD_VAR 0 3
37678: PUSH
37679: LD_INT 2
37681: ARRAY
37682: ST_TO_ADDR
// temp_list = [ ] ;
37683: LD_ADDR_VAR 0 3
37687: PUSH
37688: EMPTY
37689: ST_TO_ADDR
// for i in russian_prisoners do
37690: LD_ADDR_VAR 0 1
37694: PUSH
37695: LD_EXP 80
37699: PUSH
37700: FOR_IN
37701: IFFALSE 37780
// if not GetBType ( IsInUnit ( i ) ) in [ b_depot , b_warehouse ] then
37703: LD_VAR 0 1
37707: PPUSH
37708: CALL_OW 310
37712: PPUSH
37713: CALL_OW 266
37717: PUSH
37718: LD_INT 0
37720: PUSH
37721: LD_INT 1
37723: PUSH
37724: EMPTY
37725: LIST
37726: LIST
37727: IN
37728: NOT
37729: IFFALSE 37778
// begin temp_list = temp_list ^ i ;
37731: LD_ADDR_VAR 0 3
37735: PUSH
37736: LD_VAR 0 3
37740: PUSH
37741: LD_VAR 0 1
37745: ADD
37746: ST_TO_ADDR
// if GetSide ( i ) <> russians_alt then
37747: LD_VAR 0 1
37751: PPUSH
37752: CALL_OW 255
37756: PUSH
37757: LD_EXP 6
37761: NONEQUAL
37762: IFFALSE 37778
// SetSide ( i , russians_alt ) ;
37764: LD_VAR 0 1
37768: PPUSH
37769: LD_EXP 6
37773: PPUSH
37774: CALL_OW 235
// end ;
37778: GO 37700
37780: POP
37781: POP
// if humans_needing_healing > 0 then
37782: LD_VAR 0 8
37786: PUSH
37787: LD_INT 0
37789: GREATER
37790: IFFALSE 37814
// temp_list = temp_list diff ( humans_needing_healing ^ scis_present ) ;
37792: LD_ADDR_VAR 0 3
37796: PUSH
37797: LD_VAR 0 3
37801: PUSH
37802: LD_VAR 0 8
37806: PUSH
37807: LD_VAR 0 9
37811: ADD
37812: DIFF
37813: ST_TO_ADDR
// i = SendToDepot ( temp_list ) ;
37814: LD_ADDR_VAR 0 1
37818: PUSH
37819: LD_VAR 0 3
37823: PPUSH
37824: CALL 39095 0 1
37828: ST_TO_ADDR
// temp_list = russian_prisoners + UnitFilter ( [ Gossudarov ] , [ f_alive ] ) ;
37829: LD_ADDR_VAR 0 3
37833: PUSH
37834: LD_EXP 80
37838: PUSH
37839: LD_EXP 13
37843: PUSH
37844: EMPTY
37845: LIST
37846: PPUSH
37847: LD_INT 51
37849: PUSH
37850: EMPTY
37851: LIST
37852: PPUSH
37853: CALL_OW 72
37857: PLUS
37858: ST_TO_ADDR
// if ( i = temp_list + 0 and temp_list <= 5 ) or i = 5 then
37859: LD_VAR 0 1
37863: PUSH
37864: LD_VAR 0 3
37868: PUSH
37869: LD_INT 0
37871: PLUS
37872: EQUAL
37873: PUSH
37874: LD_VAR 0 3
37878: PUSH
37879: LD_INT 5
37881: LESSEQUAL
37882: AND
37883: PUSH
37884: LD_VAR 0 1
37888: PUSH
37889: LD_INT 5
37891: EQUAL
37892: OR
37893: IFFALSE 37905
// everyone_was_in_depot = true else
37895: LD_ADDR_VAR 0 14
37899: PUSH
37900: LD_INT 1
37902: ST_TO_ADDR
37903: GO 38187
// if everyone_was_in_depot then
37905: LD_VAR 0 14
37909: IFFALSE 38187
// if ( i < temp_list and temp_list <= 5 ) or ( i < 5 and temp_list > 5 ) then
37911: LD_VAR 0 1
37915: PUSH
37916: LD_VAR 0 3
37920: LESS
37921: PUSH
37922: LD_VAR 0 3
37926: PUSH
37927: LD_INT 5
37929: LESSEQUAL
37930: AND
37931: PUSH
37932: LD_VAR 0 1
37936: PUSH
37937: LD_INT 5
37939: LESS
37940: PUSH
37941: LD_VAR 0 3
37945: PUSH
37946: LD_INT 5
37948: GREATER
37949: AND
37950: OR
37951: IFFALSE 38187
// begin everyone_was_in_depot = false ;
37953: LD_ADDR_VAR 0 14
37957: PUSH
37958: LD_INT 0
37960: ST_TO_ADDR
// russian_prisoners_decision = Query ( QPrisonersSecond ) ;
37961: LD_ADDR_EXP 81
37965: PUSH
37966: LD_STRING QPrisonersSecond
37968: PPUSH
37969: CALL_OW 97
37973: ST_TO_ADDR
// DialogueOn ;
37974: CALL_OW 6
// case russian_prisoners_decision of 1 :
37978: LD_EXP 81
37982: PUSH
37983: LD_INT 1
37985: DOUBLE
37986: EQUAL
37987: IFTRUE 37991
37989: GO 38059
37991: POP
// begin Say ( Heike , D7-21-H-1 ) ;
37992: LD_EXP 7
37996: PPUSH
37997: LD_STRING D7-21-H-1
37999: PPUSH
38000: CALL_OW 88
// if GetSex ( russian_prisoners [ 1 ] ) = sex_male then
38004: LD_EXP 80
38008: PUSH
38009: LD_INT 1
38011: ARRAY
38012: PPUSH
38013: CALL_OW 258
38017: PUSH
38018: LD_INT 1
38020: EQUAL
38021: IFFALSE 38041
// Say ( russian_prisoners [ 1 ] , D7-21-RuM-1 ) else
38023: LD_EXP 80
38027: PUSH
38028: LD_INT 1
38030: ARRAY
38031: PPUSH
38032: LD_STRING D7-21-RuM-1
38034: PPUSH
38035: CALL_OW 88
38039: GO 38057
// Say ( russian_prisoners [ 1 ] , D7-21-RuF-1 ) ;
38041: LD_EXP 80
38045: PUSH
38046: LD_INT 1
38048: ARRAY
38049: PPUSH
38050: LD_STRING D7-21-RuF-1
38052: PPUSH
38053: CALL_OW 88
// end ; 2 :
38057: GO 38171
38059: LD_INT 2
38061: DOUBLE
38062: EQUAL
38063: IFTRUE 38067
38065: GO 38082
38067: POP
// Say ( Heike , D7-22-H-1 ) ; 3 :
38068: LD_EXP 7
38072: PPUSH
38073: LD_STRING D7-22-H-1
38075: PPUSH
38076: CALL_OW 88
38080: GO 38171
38082: LD_INT 3
38084: DOUBLE
38085: EQUAL
38086: IFTRUE 38090
38088: GO 38170
38090: POP
// begin Say ( Heike , D7-23-H-1 ) ;
38091: LD_EXP 7
38095: PPUSH
38096: LD_STRING D7-23-H-1
38098: PPUSH
38099: CALL_OW 88
// if GetSex ( russian_prisoners [ 1 ] ) = sex_male then
38103: LD_EXP 80
38107: PUSH
38108: LD_INT 1
38110: ARRAY
38111: PPUSH
38112: CALL_OW 258
38116: PUSH
38117: LD_INT 1
38119: EQUAL
38120: IFFALSE 38140
// Say ( russian_prisoners [ 1 ] , D7-23-RuM-1 ) else
38122: LD_EXP 80
38126: PUSH
38127: LD_INT 1
38129: ARRAY
38130: PPUSH
38131: LD_STRING D7-23-RuM-1
38133: PPUSH
38134: CALL_OW 88
38138: GO 38156
// Say ( russian_prisoners [ 1 ] , D7-23-RuF-1 ) ;
38140: LD_EXP 80
38144: PUSH
38145: LD_INT 1
38147: ARRAY
38148: PPUSH
38149: LD_STRING D7-23-RuF-1
38151: PPUSH
38152: CALL_OW 88
// Say ( Heike , D7-23-H-2 ) ;
38156: LD_EXP 7
38160: PPUSH
38161: LD_STRING D7-23-H-2
38163: PPUSH
38164: CALL_OW 88
// end ; end ;
38168: GO 38171
38170: POP
// DialogueOff ;
38171: CALL_OW 7
// if russian_prisoners_decision <> 2 then
38175: LD_EXP 81
38179: PUSH
38180: LD_INT 2
38182: NONEQUAL
38183: IFFALSE 38187
// continue ;
38185: GO 35877
// end ; end ; 3 :
38187: GO 38450
38189: LD_INT 3
38191: DOUBLE
38192: EQUAL
38193: IFTRUE 38197
38195: GO 38449
38197: POP
// begin temp_list = FindPrisonersNeedingHealing ( 250 ) ;
38198: LD_ADDR_VAR 0 3
38202: PUSH
38203: LD_INT 250
38205: PPUSH
38206: CALL 40015 0 1
38210: ST_TO_ADDR
// humans_needing_healing = temp_list [ 1 ] ;
38211: LD_ADDR_VAR 0 8
38215: PUSH
38216: LD_VAR 0 3
38220: PUSH
38221: LD_INT 1
38223: ARRAY
38224: ST_TO_ADDR
// scis_present = temp_list [ 2 ] ;
38225: LD_ADDR_VAR 0 9
38229: PUSH
38230: LD_VAR 0 3
38234: PUSH
38235: LD_INT 2
38237: ARRAY
38238: ST_TO_ADDR
// for i in russian_prisoners do
38239: LD_ADDR_VAR 0 1
38243: PUSH
38244: LD_EXP 80
38248: PUSH
38249: FOR_IN
38250: IFFALSE 38445
// begin if GetSide ( i ) <> russians_alt then
38252: LD_VAR 0 1
38256: PPUSH
38257: CALL_OW 255
38261: PUSH
38262: LD_EXP 6
38266: NONEQUAL
38267: IFFALSE 38283
// SetSide ( i , russians_alt ) ;
38269: LD_VAR 0 1
38273: PPUSH
38274: LD_EXP 6
38278: PPUSH
38279: CALL_OW 235
// if humans_needing_healing > 0 then
38283: LD_VAR 0 8
38287: PUSH
38288: LD_INT 0
38290: GREATER
38291: IFFALSE 38313
// if i in humans_needing_healing ^ scis_present then
38293: LD_VAR 0 1
38297: PUSH
38298: LD_VAR 0 8
38302: PUSH
38303: LD_VAR 0 9
38307: ADD
38308: IN
38309: IFFALSE 38313
// continue ;
38311: GO 38249
// case GetType ( IsInUnit ( i ) ) of unit_building :
38313: LD_VAR 0 1
38317: PPUSH
38318: CALL_OW 310
38322: PPUSH
38323: CALL_OW 247
38327: PUSH
38328: LD_INT 3
38330: DOUBLE
38331: EQUAL
38332: IFTRUE 38336
38334: GO 38350
38336: POP
// begin ComExitBuilding ( i ) ;
38337: LD_VAR 0 1
38341: PPUSH
38342: CALL_OW 122
// continue ;
38346: GO 38249
// end ; unit_vehicle :
38348: GO 38373
38350: LD_INT 2
38352: DOUBLE
38353: EQUAL
38354: IFTRUE 38358
38356: GO 38372
38358: POP
// begin ComExitVehicle ( i ) ;
38359: LD_VAR 0 1
38363: PPUSH
38364: CALL_OW 121
// continue ;
38368: GO 38249
// end ; end ;
38370: GO 38373
38372: POP
// if not IsInArea ( i , prisoners_exit_area ) then
38373: LD_VAR 0 1
38377: PPUSH
38378: LD_INT 17
38380: PPUSH
38381: CALL_OW 308
38385: NOT
38386: IFFALSE 38402
// ComMoveToArea ( i , prisoners_exit_area ) else
38388: LD_VAR 0 1
38392: PPUSH
38393: LD_INT 17
38395: PPUSH
38396: CALL_OW 113
38400: GO 38443
// begin russian_prisoners = russian_prisoners diff i ;
38402: LD_ADDR_EXP 80
38406: PUSH
38407: LD_EXP 80
38411: PUSH
38412: LD_VAR 0 1
38416: DIFF
38417: ST_TO_ADDR
// russian_prisoners_escaped = russian_prisoners_escaped ^ i ;
38418: LD_ADDR_EXP 83
38422: PUSH
38423: LD_EXP 83
38427: PUSH
38428: LD_VAR 0 1
38432: ADD
38433: ST_TO_ADDR
// RemoveUnit ( i ) ;
38434: LD_VAR 0 1
38438: PPUSH
38439: CALL_OW 64
// end ; end ;
38443: GO 38249
38445: POP
38446: POP
// end ; end ;
38447: GO 38450
38449: POP
// if humans_needing_healing > 0 then
38450: LD_VAR 0 8
38454: PUSH
38455: LD_INT 0
38457: GREATER
38458: IFFALSE 39088
// begin if Gossudarov in humans_needing_healing ^ scis_present then
38460: LD_EXP 13
38464: PUSH
38465: LD_VAR 0 8
38469: PUSH
38470: LD_VAR 0 9
38474: ADD
38475: IN
38476: IFFALSE 38486
// disable_gossudarov_single_control = true ;
38478: LD_ADDR_EXP 89
38482: PUSH
38483: LD_INT 1
38485: ST_TO_ADDR
// temp_list = [ ] ;
38486: LD_ADDR_VAR 0 3
38490: PUSH
38491: EMPTY
38492: ST_TO_ADDR
// for i in humans_needing_healing diff scis_present do
38493: LD_ADDR_VAR 0 1
38497: PUSH
38498: LD_VAR 0 8
38502: PUSH
38503: LD_VAR 0 9
38507: DIFF
38508: PUSH
38509: FOR_IN
38510: IFFALSE 38699
// case GetType ( IsInUnit ( i ) ) of unit_vehicle :
38512: LD_VAR 0 1
38516: PPUSH
38517: CALL_OW 310
38521: PPUSH
38522: CALL_OW 247
38526: PUSH
38527: LD_INT 2
38529: DOUBLE
38530: EQUAL
38531: IFTRUE 38535
38533: GO 38547
38535: POP
// ComExitVehicle ( i ) ; unit_building :
38536: LD_VAR 0 1
38540: PPUSH
38541: CALL_OW 121
38545: GO 38697
38547: LD_INT 3
38549: DOUBLE
38550: EQUAL
38551: IFTRUE 38555
38553: GO 38567
38555: POP
// ComExitBuilding ( i ) ; else
38556: LD_VAR 0 1
38560: PPUSH
38561: CALL_OW 122
38565: GO 38697
38567: POP
// begin temp_list = temp_list ^ i ;
38568: LD_ADDR_VAR 0 3
38572: PUSH
38573: LD_VAR 0 3
38577: PUSH
38578: LD_VAR 0 1
38582: ADD
38583: ST_TO_ADDR
// case russian_prisoners_decision of 2 :
38584: LD_EXP 81
38588: PUSH
38589: LD_INT 2
38591: DOUBLE
38592: EQUAL
38593: IFTRUE 38597
38595: GO 38676
38597: POP
// begin if GetDistUnitXY ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] ) > 4 then
38598: LD_VAR 0 1
38602: PPUSH
38603: LD_EXP 31
38607: PUSH
38608: LD_INT 1
38610: ARRAY
38611: PUSH
38612: LD_INT 1
38614: ARRAY
38615: PPUSH
38616: LD_EXP 31
38620: PUSH
38621: LD_INT 1
38623: ARRAY
38624: PUSH
38625: LD_INT 2
38627: ARRAY
38628: PPUSH
38629: CALL_OW 297
38633: PUSH
38634: LD_INT 4
38636: GREATER
38637: IFFALSE 38674
// ComMoveXY ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] ) ;
38639: LD_VAR 0 1
38643: PPUSH
38644: LD_EXP 31
38648: PUSH
38649: LD_INT 1
38651: ARRAY
38652: PUSH
38653: LD_INT 1
38655: ARRAY
38656: PPUSH
38657: LD_EXP 31
38661: PUSH
38662: LD_INT 1
38664: ARRAY
38665: PUSH
38666: LD_INT 2
38668: ARRAY
38669: PPUSH
38670: CALL_OW 111
// end ; 3 :
38674: GO 38697
38676: LD_INT 3
38678: DOUBLE
38679: EQUAL
38680: IFTRUE 38684
38682: GO 38696
38684: POP
// begin ComStop ( i ) ;
38685: LD_VAR 0 1
38689: PPUSH
38690: CALL_OW 141
// end ; end ;
38694: GO 38697
38696: POP
// end ; end ;
38697: GO 38509
38699: POP
38700: POP
// temp_list_2 = [ ] ;
38701: LD_ADDR_VAR 0 6
38705: PUSH
38706: EMPTY
38707: ST_TO_ADDR
// for i in scis_present do
38708: LD_ADDR_VAR 0 1
38712: PUSH
38713: LD_VAR 0 9
38717: PUSH
38718: FOR_IN
38719: IFFALSE 38795
// case GetType ( IsInUnit ( i ) ) of unit_vehicle :
38721: LD_VAR 0 1
38725: PPUSH
38726: CALL_OW 310
38730: PPUSH
38731: CALL_OW 247
38735: PUSH
38736: LD_INT 2
38738: DOUBLE
38739: EQUAL
38740: IFTRUE 38744
38742: GO 38756
38744: POP
// ComExitVehicle ( i ) ; unit_building :
38745: LD_VAR 0 1
38749: PPUSH
38750: CALL_OW 121
38754: GO 38793
38756: LD_INT 3
38758: DOUBLE
38759: EQUAL
38760: IFTRUE 38764
38762: GO 38776
38764: POP
// ComExitBuilding ( i ) ; else
38765: LD_VAR 0 1
38769: PPUSH
38770: CALL_OW 122
38774: GO 38793
38776: POP
// temp_list_2 = temp_list_2 ^ i ; end ;
38777: LD_ADDR_VAR 0 6
38781: PUSH
38782: LD_VAR 0 6
38786: PUSH
38787: LD_VAR 0 1
38791: ADD
38792: ST_TO_ADDR
38793: GO 38718
38795: POP
38796: POP
// if temp_list > 0 and temp_list_2 > 0 then
38797: LD_VAR 0 3
38801: PUSH
38802: LD_INT 0
38804: GREATER
38805: PUSH
38806: LD_VAR 0 6
38810: PUSH
38811: LD_INT 0
38813: GREATER
38814: AND
38815: IFFALSE 39088
// begin temp_list_3 = [ ] ;
38817: LD_ADDR_VAR 0 11
38821: PUSH
38822: EMPTY
38823: ST_TO_ADDR
// for i in temp_list do
38824: LD_ADDR_VAR 0 1
38828: PUSH
38829: LD_VAR 0 3
38833: PUSH
38834: FOR_IN
38835: IFFALSE 38886
// if GetLives ( i ) <= 250 then
38837: LD_VAR 0 1
38841: PPUSH
38842: CALL_OW 256
38846: PUSH
38847: LD_INT 250
38849: LESSEQUAL
38850: IFFALSE 38884
// begin temp_list_3 = temp_list_3 ^ i ;
38852: LD_ADDR_VAR 0 11
38856: PUSH
38857: LD_VAR 0 11
38861: PUSH
38862: LD_VAR 0 1
38866: ADD
38867: ST_TO_ADDR
// temp_list = temp_list diff i ;
38868: LD_ADDR_VAR 0 3
38872: PUSH
38873: LD_VAR 0 3
38877: PUSH
38878: LD_VAR 0 1
38882: DIFF
38883: ST_TO_ADDR
// end ;
38884: GO 38834
38886: POP
38887: POP
// for i in temp_list_2 do
38888: LD_ADDR_VAR 0 1
38892: PUSH
38893: LD_VAR 0 6
38897: PUSH
38898: FOR_IN
38899: IFFALSE 39086
// begin temp_list_4 = [ ] ;
38901: LD_ADDR_VAR 0 12
38905: PUSH
38906: EMPTY
38907: ST_TO_ADDR
// if i = Gossudarov then
38908: LD_VAR 0 1
38912: PUSH
38913: LD_EXP 13
38917: EQUAL
38918: IFFALSE 38994
// begin temp_list_4 = UnitFilter ( temp_list_3 diff i , [ f_inarea , ru_base_area ] ) ;
38920: LD_ADDR_VAR 0 12
38924: PUSH
38925: LD_VAR 0 11
38929: PUSH
38930: LD_VAR 0 1
38934: DIFF
38935: PPUSH
38936: LD_INT 95
38938: PUSH
38939: LD_INT 1
38941: PUSH
38942: EMPTY
38943: LIST
38944: LIST
38945: PPUSH
38946: CALL_OW 72
38950: ST_TO_ADDR
// if temp_list_4 = 0 then
38951: LD_VAR 0 12
38955: PUSH
38956: LD_INT 0
38958: EQUAL
38959: IFFALSE 38992
// temp_list_4 = UnitFilter ( temp_list diff i , [ f_inarea , ru_base_area ] ) ;
38961: LD_ADDR_VAR 0 12
38965: PUSH
38966: LD_VAR 0 3
38970: PUSH
38971: LD_VAR 0 1
38975: DIFF
38976: PPUSH
38977: LD_INT 95
38979: PUSH
38980: LD_INT 1
38982: PUSH
38983: EMPTY
38984: LIST
38985: LIST
38986: PPUSH
38987: CALL_OW 72
38991: ST_TO_ADDR
// end else
38992: GO 39036
// begin temp_list_4 = temp_list_3 diff i ;
38994: LD_ADDR_VAR 0 12
38998: PUSH
38999: LD_VAR 0 11
39003: PUSH
39004: LD_VAR 0 1
39008: DIFF
39009: ST_TO_ADDR
// if temp_list_4 = 0 then
39010: LD_VAR 0 12
39014: PUSH
39015: LD_INT 0
39017: EQUAL
39018: IFFALSE 39036
// temp_list_4 = temp_list diff i ;
39020: LD_ADDR_VAR 0 12
39024: PUSH
39025: LD_VAR 0 3
39029: PUSH
39030: LD_VAR 0 1
39034: DIFF
39035: ST_TO_ADDR
// end ; if temp_list_4 > 0 then
39036: LD_VAR 0 12
39040: PUSH
39041: LD_INT 0
39043: GREATER
39044: IFFALSE 39068
// temp_unit = NearestUnitToUnit ( temp_list_4 , i ) else
39046: LD_ADDR_VAR 0 4
39050: PUSH
39051: LD_VAR 0 12
39055: PPUSH
39056: LD_VAR 0 1
39060: PPUSH
39061: CALL_OW 74
39065: ST_TO_ADDR
39066: GO 39070
// continue ;
39068: GO 38898
// ComHeal ( i , temp_unit ) ;
39070: LD_VAR 0 1
39074: PPUSH
39075: LD_VAR 0 4
39079: PPUSH
39080: CALL_OW 128
// end ;
39084: GO 38898
39086: POP
39087: POP
// end ; end ; until false ;
39088: LD_INT 0
39090: IFFALSE 35877
// end ;
39092: PPOPN 16
39094: END
// function SendToDepot ( unit_list ) ; var temp_list_2 , temp_unit , i , task_list , val , inun , count_inside , hex_list ; begin
39095: LD_INT 0
39097: PPUSH
39098: PPUSH
39099: PPUSH
39100: PPUSH
39101: PPUSH
39102: PPUSH
39103: PPUSH
39104: PPUSH
39105: PPUSH
// temp_list_2 = FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] , [ f_ok ] , [ f_not , [ f_constructed ] ] ] ) ;
39106: LD_ADDR_VAR 0 3
39110: PUSH
39111: LD_INT 22
39113: PUSH
39114: LD_EXP 2
39118: PUSH
39119: EMPTY
39120: LIST
39121: LIST
39122: PUSH
39123: LD_INT 2
39125: PUSH
39126: LD_INT 30
39128: PUSH
39129: LD_INT 0
39131: PUSH
39132: EMPTY
39133: LIST
39134: LIST
39135: PUSH
39136: LD_INT 30
39138: PUSH
39139: LD_INT 1
39141: PUSH
39142: EMPTY
39143: LIST
39144: LIST
39145: PUSH
39146: EMPTY
39147: LIST
39148: LIST
39149: LIST
39150: PUSH
39151: LD_INT 50
39153: PUSH
39154: EMPTY
39155: LIST
39156: PUSH
39157: LD_INT 3
39159: PUSH
39160: LD_INT 57
39162: PUSH
39163: EMPTY
39164: LIST
39165: PUSH
39166: EMPTY
39167: LIST
39168: LIST
39169: PUSH
39170: EMPTY
39171: LIST
39172: LIST
39173: LIST
39174: LIST
39175: PPUSH
39176: CALL_OW 69
39180: ST_TO_ADDR
// if temp_list_2 > 0 then
39181: LD_VAR 0 3
39185: PUSH
39186: LD_INT 0
39188: GREATER
39189: IFFALSE 39207
// temp_unit = temp_list_2 [ 1 ] else
39191: LD_ADDR_VAR 0 4
39195: PUSH
39196: LD_VAR 0 3
39200: PUSH
39201: LD_INT 1
39203: ARRAY
39204: ST_TO_ADDR
39205: GO 39215
// temp_unit = 0 ;
39207: LD_ADDR_VAR 0 4
39211: PUSH
39212: LD_INT 0
39214: ST_TO_ADDR
// if temp_unit > 0 then
39215: LD_VAR 0 4
39219: PUSH
39220: LD_INT 0
39222: GREATER
39223: IFFALSE 39336
// begin hex_list = [ ShiftX ( GetX ( temp_unit ) , GetDir ( temp_unit ) , 3 ) , ShiftY ( GetY ( temp_unit ) , GetDir ( temp_unit ) , 3 ) ] ;
39225: LD_ADDR_VAR 0 10
39229: PUSH
39230: LD_VAR 0 4
39234: PPUSH
39235: CALL_OW 250
39239: PPUSH
39240: LD_VAR 0 4
39244: PPUSH
39245: CALL_OW 254
39249: PPUSH
39250: LD_INT 3
39252: PPUSH
39253: CALL_OW 272
39257: PUSH
39258: LD_VAR 0 4
39262: PPUSH
39263: CALL_OW 251
39267: PPUSH
39268: LD_VAR 0 4
39272: PPUSH
39273: CALL_OW 254
39277: PPUSH
39278: LD_INT 3
39280: PPUSH
39281: CALL_OW 273
39285: PUSH
39286: EMPTY
39287: LIST
39288: LIST
39289: ST_TO_ADDR
// temp_list_2 = UnitFilter ( UnitsInside ( temp_unit ) , [ f_nation , nation_russian ] ) ;
39290: LD_ADDR_VAR 0 3
39294: PUSH
39295: LD_VAR 0 4
39299: PPUSH
39300: CALL_OW 313
39304: PPUSH
39305: LD_INT 23
39307: PUSH
39308: LD_INT 3
39310: PUSH
39311: EMPTY
39312: LIST
39313: LIST
39314: PPUSH
39315: CALL_OW 72
39319: ST_TO_ADDR
// count_inside = temp_list_2 + 0 ;
39320: LD_ADDR_VAR 0 9
39324: PUSH
39325: LD_VAR 0 3
39329: PUSH
39330: LD_INT 0
39332: PLUS
39333: ST_TO_ADDR
// end else
39334: GO 39344
// count_inside = 0 ;
39336: LD_ADDR_VAR 0 9
39340: PUSH
39341: LD_INT 0
39343: ST_TO_ADDR
// result = count_inside ;
39344: LD_ADDR_VAR 0 2
39348: PUSH
39349: LD_VAR 0 9
39353: ST_TO_ADDR
// for i = 6 to count_inside do
39354: LD_ADDR_VAR 0 5
39358: PUSH
39359: DOUBLE
39360: LD_INT 6
39362: DEC
39363: ST_TO_ADDR
39364: LD_VAR 0 9
39368: PUSH
39369: FOR_TO
39370: IFFALSE 39389
// ComExitBuilding ( temp_list_2 [ i ] ) ;
39372: LD_VAR 0 3
39376: PUSH
39377: LD_VAR 0 5
39381: ARRAY
39382: PPUSH
39383: CALL_OW 122
39387: GO 39369
39389: POP
39390: POP
// for i in unit_list do
39391: LD_ADDR_VAR 0 5
39395: PUSH
39396: LD_VAR 0 1
39400: PUSH
39401: FOR_IN
39402: IFFALSE 39810
// begin inun = IsInUnit ( i ) ;
39404: LD_ADDR_VAR 0 8
39408: PUSH
39409: LD_VAR 0 5
39413: PPUSH
39414: CALL_OW 310
39418: ST_TO_ADDR
// case GetType ( inun ) of unit_vehicle :
39419: LD_VAR 0 8
39423: PPUSH
39424: CALL_OW 247
39428: PUSH
39429: LD_INT 2
39431: DOUBLE
39432: EQUAL
39433: IFTRUE 39437
39435: GO 39449
39437: POP
// ComExitVehicle ( i ) ; unit_building :
39438: LD_VAR 0 5
39442: PPUSH
39443: CALL_OW 121
39447: GO 39808
39449: LD_INT 3
39451: DOUBLE
39452: EQUAL
39453: IFTRUE 39457
39455: GO 39481
39457: POP
// begin if inun <> temp_unit then
39458: LD_VAR 0 8
39462: PUSH
39463: LD_VAR 0 4
39467: NONEQUAL
39468: IFFALSE 39479
// ComExitBuilding ( i ) ;
39470: LD_VAR 0 5
39474: PPUSH
39475: CALL_OW 122
// end ; else
39479: GO 39808
39481: POP
// if temp_unit > 0 and count_inside < 5 then
39482: LD_VAR 0 4
39486: PUSH
39487: LD_INT 0
39489: GREATER
39490: PUSH
39491: LD_VAR 0 9
39495: PUSH
39496: LD_INT 5
39498: LESS
39499: AND
39500: IFFALSE 39732
// begin count_inside = count_inside + 1 ;
39502: LD_ADDR_VAR 0 9
39506: PUSH
39507: LD_VAR 0 9
39511: PUSH
39512: LD_INT 1
39514: PLUS
39515: ST_TO_ADDR
// if GetDistUnitXY ( i , hex_list [ 1 ] , hex_list [ 2 ] ) <= 1 then
39516: LD_VAR 0 5
39520: PPUSH
39521: LD_VAR 0 10
39525: PUSH
39526: LD_INT 1
39528: ARRAY
39529: PPUSH
39530: LD_VAR 0 10
39534: PUSH
39535: LD_INT 2
39537: ARRAY
39538: PPUSH
39539: CALL_OW 297
39543: PUSH
39544: LD_INT 1
39546: LESSEQUAL
39547: IFFALSE 39579
// begin SetSide ( i , you ) ;
39549: LD_VAR 0 5
39553: PPUSH
39554: LD_EXP 2
39558: PPUSH
39559: CALL_OW 235
// ComEnterUnit ( i , temp_unit ) ;
39563: LD_VAR 0 5
39567: PPUSH
39568: LD_VAR 0 4
39572: PPUSH
39573: CALL_OW 120
// end else
39577: GO 39730
// begin task_list = GetTaskList ( i ) ;
39579: LD_ADDR_VAR 0 6
39583: PUSH
39584: LD_VAR 0 5
39588: PPUSH
39589: CALL_OW 437
39593: ST_TO_ADDR
// val = false ;
39594: LD_ADDR_VAR 0 7
39598: PUSH
39599: LD_INT 0
39601: ST_TO_ADDR
// if task_list = 0 then
39602: LD_VAR 0 6
39606: PUSH
39607: LD_INT 0
39609: EQUAL
39610: IFFALSE 39622
// val = true else
39612: LD_ADDR_VAR 0 7
39616: PUSH
39617: LD_INT 1
39619: ST_TO_ADDR
39620: GO 39697
// if not task_list [ 1 ] [ 1 ] = M or task_list [ 1 ] [ 2 ] <> hex_list [ 1 ] or task_list [ 1 ] [ 3 ] <> hex_list [ 2 ] then
39622: LD_VAR 0 6
39626: PUSH
39627: LD_INT 1
39629: ARRAY
39630: PUSH
39631: LD_INT 1
39633: ARRAY
39634: PUSH
39635: LD_STRING M
39637: EQUAL
39638: NOT
39639: PUSH
39640: LD_VAR 0 6
39644: PUSH
39645: LD_INT 1
39647: ARRAY
39648: PUSH
39649: LD_INT 2
39651: ARRAY
39652: PUSH
39653: LD_VAR 0 10
39657: PUSH
39658: LD_INT 1
39660: ARRAY
39661: NONEQUAL
39662: OR
39663: PUSH
39664: LD_VAR 0 6
39668: PUSH
39669: LD_INT 1
39671: ARRAY
39672: PUSH
39673: LD_INT 3
39675: ARRAY
39676: PUSH
39677: LD_VAR 0 10
39681: PUSH
39682: LD_INT 2
39684: ARRAY
39685: NONEQUAL
39686: OR
39687: IFFALSE 39697
// val = true ;
39689: LD_ADDR_VAR 0 7
39693: PUSH
39694: LD_INT 1
39696: ST_TO_ADDR
// if val then
39697: LD_VAR 0 7
39701: IFFALSE 39730
// ComMoveXY ( i , hex_list [ 1 ] , hex_list [ 2 ] ) ;
39703: LD_VAR 0 5
39707: PPUSH
39708: LD_VAR 0 10
39712: PUSH
39713: LD_INT 1
39715: ARRAY
39716: PPUSH
39717: LD_VAR 0 10
39721: PUSH
39722: LD_INT 2
39724: ARRAY
39725: PPUSH
39726: CALL_OW 111
// end ; end else
39730: GO 39808
// if GetDistUnitXY ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] ) > 4 then
39732: LD_VAR 0 5
39736: PPUSH
39737: LD_EXP 31
39741: PUSH
39742: LD_INT 1
39744: ARRAY
39745: PUSH
39746: LD_INT 1
39748: ARRAY
39749: PPUSH
39750: LD_EXP 31
39754: PUSH
39755: LD_INT 1
39757: ARRAY
39758: PUSH
39759: LD_INT 2
39761: ARRAY
39762: PPUSH
39763: CALL_OW 297
39767: PUSH
39768: LD_INT 4
39770: GREATER
39771: IFFALSE 39808
// ComMoveXY ( i , ai_human_pullback_hex [ 1 ] [ 1 ] , ai_human_pullback_hex [ 1 ] [ 2 ] ) ; end ;
39773: LD_VAR 0 5
39777: PPUSH
39778: LD_EXP 31
39782: PUSH
39783: LD_INT 1
39785: ARRAY
39786: PUSH
39787: LD_INT 1
39789: ARRAY
39790: PPUSH
39791: LD_EXP 31
39795: PUSH
39796: LD_INT 1
39798: ARRAY
39799: PUSH
39800: LD_INT 2
39802: ARRAY
39803: PPUSH
39804: CALL_OW 111
// end ;
39808: GO 39401
39810: POP
39811: POP
// end ;
39812: LD_VAR 0 2
39816: RET
// export function EmptyWarVehicles ( un , within_dist , ok_vehicle ) ; var k ; begin
39817: LD_INT 0
39819: PPUSH
39820: PPUSH
// result = FilterAllUnits ( [ [ f_type , unit_vehicle ] , [ f_empty ] , [ f_control , control_manual ] , [ f_dist , un , within_dist ] ] ) ;
39821: LD_ADDR_VAR 0 4
39825: PUSH
39826: LD_INT 21
39828: PUSH
39829: LD_INT 2
39831: PUSH
39832: EMPTY
39833: LIST
39834: LIST
39835: PUSH
39836: LD_INT 58
39838: PUSH
39839: EMPTY
39840: LIST
39841: PUSH
39842: LD_INT 33
39844: PUSH
39845: LD_INT 1
39847: PUSH
39848: EMPTY
39849: LIST
39850: LIST
39851: PUSH
39852: LD_INT 91
39854: PUSH
39855: LD_VAR 0 1
39859: PUSH
39860: LD_VAR 0 2
39864: PUSH
39865: EMPTY
39866: LIST
39867: LIST
39868: LIST
39869: PUSH
39870: EMPTY
39871: LIST
39872: LIST
39873: LIST
39874: LIST
39875: PPUSH
39876: CALL_OW 69
39880: ST_TO_ADDR
// if ok_vehicle then
39881: LD_VAR 0 3
39885: IFFALSE 39908
// result = UnitFilter ( result , [ f_ok ] ) ;
39887: LD_ADDR_VAR 0 4
39891: PUSH
39892: LD_VAR 0 4
39896: PPUSH
39897: LD_INT 50
39899: PUSH
39900: EMPTY
39901: LIST
39902: PPUSH
39903: CALL_OW 72
39907: ST_TO_ADDR
// k = 1 ;
39908: LD_ADDR_VAR 0 5
39912: PUSH
39913: LD_INT 1
39915: ST_TO_ADDR
// while k <= result do
39916: LD_VAR 0 5
39920: PUSH
39921: LD_VAR 0 4
39925: LESSEQUAL
39926: IFFALSE 40010
// begin if GetWeapon ( result [ k ] ) in [ ar_cargo_bay , ar_control_tower , ar_radar , ru_cargo_bay , ru_crane , ru_bulldozer ] then
39928: LD_VAR 0 4
39932: PUSH
39933: LD_VAR 0 5
39937: ARRAY
39938: PPUSH
39939: CALL_OW 264
39943: PUSH
39944: LD_INT 32
39946: PUSH
39947: LD_INT 31
39949: PUSH
39950: LD_INT 30
39952: PUSH
39953: LD_INT 51
39955: PUSH
39956: LD_INT 52
39958: PUSH
39959: LD_INT 53
39961: PUSH
39962: EMPTY
39963: LIST
39964: LIST
39965: LIST
39966: LIST
39967: LIST
39968: LIST
39969: IN
39970: IFFALSE 39994
// begin result = Delete ( result , k ) ;
39972: LD_ADDR_VAR 0 4
39976: PUSH
39977: LD_VAR 0 4
39981: PPUSH
39982: LD_VAR 0 5
39986: PPUSH
39987: CALL_OW 3
39991: ST_TO_ADDR
// continue ;
39992: GO 39916
// end ; k = k + 1 ;
39994: LD_ADDR_VAR 0 5
39998: PUSH
39999: LD_VAR 0 5
40003: PUSH
40004: LD_INT 1
40006: PLUS
40007: ST_TO_ADDR
// end ;
40008: GO 39916
// end ;
40010: LD_VAR 0 4
40014: RET
// function FindPrisonersNeedingHealing ( hp_limit ) ; var i , scis_present , humans_needing_healing ; begin
40015: LD_INT 0
40017: PPUSH
40018: PPUSH
40019: PPUSH
40020: PPUSH
// scis_present = UnitFilter ( russian_prisoners ^ Gossudarov , [ [ f_ok ] , [ f_class , class_scientistic ] ] ) ;
40021: LD_ADDR_VAR 0 4
40025: PUSH
40026: LD_EXP 80
40030: PUSH
40031: LD_EXP 13
40035: ADD
40036: PPUSH
40037: LD_INT 50
40039: PUSH
40040: EMPTY
40041: LIST
40042: PUSH
40043: LD_INT 25
40045: PUSH
40046: LD_INT 4
40048: PUSH
40049: EMPTY
40050: LIST
40051: LIST
40052: PUSH
40053: EMPTY
40054: LIST
40055: LIST
40056: PPUSH
40057: CALL_OW 72
40061: ST_TO_ADDR
// humans_needing_healing = [ ] ;
40062: LD_ADDR_VAR 0 5
40066: PUSH
40067: EMPTY
40068: ST_TO_ADDR
// if scis_present > 0 then
40069: LD_VAR 0 4
40073: PUSH
40074: LD_INT 0
40076: GREATER
40077: IFFALSE 40249
// begin for i in russian_prisoners ^ Gossudarov do
40079: LD_ADDR_VAR 0 3
40083: PUSH
40084: LD_EXP 80
40088: PUSH
40089: LD_EXP 13
40093: ADD
40094: PUSH
40095: FOR_IN
40096: IFFALSE 40133
// if GetLives ( i ) <= hp_limit then
40098: LD_VAR 0 3
40102: PPUSH
40103: CALL_OW 256
40107: PUSH
40108: LD_VAR 0 1
40112: LESSEQUAL
40113: IFFALSE 40131
// humans_needing_healing = humans_needing_healing ^ i ;
40115: LD_ADDR_VAR 0 5
40119: PUSH
40120: LD_VAR 0 5
40124: PUSH
40125: LD_VAR 0 3
40129: ADD
40130: ST_TO_ADDR
40131: GO 40095
40133: POP
40134: POP
// if humans_needing_healing + 0 = 1 and scis_present + 0 = 1 then
40135: LD_VAR 0 5
40139: PUSH
40140: LD_INT 0
40142: PLUS
40143: PUSH
40144: LD_INT 1
40146: EQUAL
40147: PUSH
40148: LD_VAR 0 4
40152: PUSH
40153: LD_INT 0
40155: PLUS
40156: PUSH
40157: LD_INT 1
40159: EQUAL
40160: AND
40161: IFFALSE 40190
// if humans_needing_healing [ 1 ] = scis_present [ 1 ] then
40163: LD_VAR 0 5
40167: PUSH
40168: LD_INT 1
40170: ARRAY
40171: PUSH
40172: LD_VAR 0 4
40176: PUSH
40177: LD_INT 1
40179: ARRAY
40180: EQUAL
40181: IFFALSE 40190
// humans_needing_healing = [ ] ;
40183: LD_ADDR_VAR 0 5
40187: PUSH
40188: EMPTY
40189: ST_TO_ADDR
// if Gossudarov in scis_present and UnitFilter ( humans_needing_healing diff Gossudarov , [ f_inarea , ru_base_area ] ) = 0 then
40190: LD_EXP 13
40194: PUSH
40195: LD_VAR 0 4
40199: IN
40200: PUSH
40201: LD_VAR 0 5
40205: PUSH
40206: LD_EXP 13
40210: DIFF
40211: PPUSH
40212: LD_INT 95
40214: PUSH
40215: LD_INT 1
40217: PUSH
40218: EMPTY
40219: LIST
40220: LIST
40221: PPUSH
40222: CALL_OW 72
40226: PUSH
40227: LD_INT 0
40229: EQUAL
40230: AND
40231: IFFALSE 40249
// scis_present = scis_present diff Gossudarov ;
40233: LD_ADDR_VAR 0 4
40237: PUSH
40238: LD_VAR 0 4
40242: PUSH
40243: LD_EXP 13
40247: DIFF
40248: ST_TO_ADDR
// end ; result = [ humans_needing_healing , scis_present ] ;
40249: LD_ADDR_VAR 0 2
40253: PUSH
40254: LD_VAR 0 5
40258: PUSH
40259: LD_VAR 0 4
40263: PUSH
40264: EMPTY
40265: LIST
40266: LIST
40267: ST_TO_ADDR
// end ;
40268: LD_VAR 0 2
40272: RET
// every 0 0$1 + 1 do var inside ;
40273: GO 40275
40275: DISABLE
40276: LD_INT 0
40278: PPUSH
// begin repeat wait ( 0 0$0.1 ) ;
40279: LD_INT 4
40281: PPUSH
40282: CALL_OW 67
// if IsDead ( Gossudarov ) then
40286: LD_EXP 13
40290: PPUSH
40291: CALL_OW 301
40295: IFFALSE 40299
// exit ;
40297: GO 40415
// if not russians_surrender then
40299: LD_EXP 76
40303: NOT
40304: IFFALSE 40308
// continue ;
40306: GO 40279
// if not GetBType ( IsInUnit ( Gossudarov ) ) in [ b_depot , b_warehouse ] then
40308: LD_EXP 13
40312: PPUSH
40313: CALL_OW 310
40317: PPUSH
40318: CALL_OW 266
40322: PUSH
40323: LD_INT 0
40325: PUSH
40326: LD_INT 1
40328: PUSH
40329: EMPTY
40330: LIST
40331: LIST
40332: IN
40333: NOT
40334: IFFALSE 40377
// begin inside = false ;
40336: LD_ADDR_VAR 0 1
40340: PUSH
40341: LD_INT 0
40343: ST_TO_ADDR
// if GetSide ( Gossudarov ) <> russians_alt then
40344: LD_EXP 13
40348: PPUSH
40349: CALL_OW 255
40353: PUSH
40354: LD_EXP 6
40358: NONEQUAL
40359: IFFALSE 40375
// SetSide ( Gossudarov , russians_alt ) ;
40361: LD_EXP 13
40365: PPUSH
40366: LD_EXP 6
40370: PPUSH
40371: CALL_OW 235
// end else
40375: GO 40385
// inside = true ;
40377: LD_ADDR_VAR 0 1
40381: PUSH
40382: LD_INT 1
40384: ST_TO_ADDR
// if not disable_gossudarov_single_control and not inside then
40385: LD_EXP 89
40389: NOT
40390: PUSH
40391: LD_VAR 0 1
40395: NOT
40396: AND
40397: IFFALSE 40411
// SendToDepot ( [ Gossudarov ] ) ;
40399: LD_EXP 13
40403: PUSH
40404: EMPTY
40405: LIST
40406: PPUSH
40407: CALL 39095 0 1
// until false ;
40411: LD_INT 0
40413: IFFALSE 40279
// end ;
40415: PPOPN 1
40417: END
// every 0 0$1 + 0 0$0.6 do var temp_list , i ; var artifact_hex , cargo_bay , has_artifact_cargo , instant_spawn ;
40418: GO 40420
40420: DISABLE
40421: LD_INT 0
40423: PPUSH
40424: PPUSH
40425: PPUSH
40426: PPUSH
40427: PPUSH
40428: PPUSH
// begin cargo_bay = 0 ;
40429: LD_ADDR_VAR 0 4
40433: PUSH
40434: LD_INT 0
40436: ST_TO_ADDR
// instant_spawn = false ;
40437: LD_ADDR_VAR 0 6
40441: PUSH
40442: LD_INT 0
40444: ST_TO_ADDR
// repeat wait ( 0 0$0.7 ) ;
40445: LD_INT 24
40447: PPUSH
40448: CALL_OW 67
// if not russians_surrender then
40452: LD_EXP 76
40456: NOT
40457: IFFALSE 40461
// continue ;
40459: GO 40445
// if IsDead ( cargo_bay ) then
40461: LD_VAR 0 4
40465: PPUSH
40466: CALL_OW 301
40470: IFFALSE 40614
// begin cargo_bay = 0 ;
40472: LD_ADDR_VAR 0 4
40476: PUSH
40477: LD_INT 0
40479: ST_TO_ADDR
// has_artifact_cargo = false ;
40480: LD_ADDR_VAR 0 5
40484: PUSH
40485: LD_INT 0
40487: ST_TO_ADDR
// if not instant_spawn then
40488: LD_VAR 0 6
40492: NOT
40493: IFFALSE 40604
// begin i = 0 0$0 ;
40495: LD_ADDR_VAR 0 2
40499: PUSH
40500: LD_INT 0
40502: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
40503: LD_INT 35
40505: PPUSH
40506: CALL_OW 67
// i = i + 0 0$1 ;
40510: LD_ADDR_VAR 0 2
40514: PUSH
40515: LD_VAR 0 2
40519: PUSH
40520: LD_INT 35
40522: PLUS
40523: ST_TO_ADDR
// if GetResourceArea ( all_but_crate_gather_area , mat_artifact ) > 0 then
40524: LD_INT 12
40526: PPUSH
40527: LD_INT 4
40529: PPUSH
40530: CALL_OW 287
40534: PUSH
40535: LD_INT 0
40537: GREATER
40538: IFFALSE 40571
// begin if i >= [ 2 2$0 , 1 1$0 , 0 0$30 ] [ difficulty ] then
40540: LD_VAR 0 2
40544: PUSH
40545: LD_INT 4200
40547: PUSH
40548: LD_INT 2100
40550: PUSH
40551: LD_INT 1050
40553: PUSH
40554: EMPTY
40555: LIST
40556: LIST
40557: LIST
40558: PUSH
40559: LD_OWVAR 67
40563: ARRAY
40564: GREATEREQUAL
40565: IFFALSE 40569
// break ;
40567: GO 40604
// end else
40569: GO 40600
// if i >= [ 5 5$0 , 3 3$0 , 2 2$30 ] [ difficulty ] then
40571: LD_VAR 0 2
40575: PUSH
40576: LD_INT 10500
40578: PUSH
40579: LD_INT 6300
40581: PUSH
40582: LD_INT 5250
40584: PUSH
40585: EMPTY
40586: LIST
40587: LIST
40588: LIST
40589: PUSH
40590: LD_OWVAR 67
40594: ARRAY
40595: GREATEREQUAL
40596: IFFALSE 40600
// break ;
40598: GO 40604
// until false ;
40600: LD_INT 0
40602: IFFALSE 40503
// end ; instant_spawn = false ;
40604: LD_ADDR_VAR 0 6
40608: PUSH
40609: LD_INT 0
40611: ST_TO_ADDR
// end else
40612: GO 40633
// has_artifact_cargo := GetCargoType ( cargo_bay ) = mat_artifact ;
40614: LD_ADDR_VAR 0 5
40618: PUSH
40619: LD_VAR 0 4
40623: PPUSH
40624: CALL_OW 288
40628: PUSH
40629: LD_INT 4
40631: EQUAL
40632: ST_TO_ADDR
// artifact_hex = [ ] ;
40633: LD_ADDR_VAR 0 3
40637: PUSH
40638: EMPTY
40639: ST_TO_ADDR
// if not has_artifact_cargo then
40640: LD_VAR 0 5
40644: NOT
40645: IFFALSE 40778
// begin temp_list = GetListOfCratesInArea ( all_but_crate_gather_area ) ^ GetListOfCratesInArea ( crate_gather_area ) ;
40647: LD_ADDR_VAR 0 1
40651: PUSH
40652: LD_INT 12
40654: PPUSH
40655: CALL_OW 435
40659: PUSH
40660: LD_INT 4
40662: PPUSH
40663: CALL_OW 435
40667: ADD
40668: ST_TO_ADDR
// i = 1 ;
40669: LD_ADDR_VAR 0 2
40673: PUSH
40674: LD_INT 1
40676: ST_TO_ADDR
// while i < temp_list do
40677: LD_VAR 0 2
40681: PUSH
40682: LD_VAR 0 1
40686: LESS
40687: IFFALSE 40778
// begin if GetResourceTypeXY ( temp_list [ i ] , temp_list [ i + 1 ] ) = mat_artifact then
40689: LD_VAR 0 1
40693: PUSH
40694: LD_VAR 0 2
40698: ARRAY
40699: PPUSH
40700: LD_VAR 0 1
40704: PUSH
40705: LD_VAR 0 2
40709: PUSH
40710: LD_INT 1
40712: PLUS
40713: ARRAY
40714: PPUSH
40715: CALL_OW 283
40719: PUSH
40720: LD_INT 4
40722: EQUAL
40723: IFFALSE 40762
// begin artifact_hex = [ temp_list [ i ] , temp_list [ i + 1 ] ] ;
40725: LD_ADDR_VAR 0 3
40729: PUSH
40730: LD_VAR 0 1
40734: PUSH
40735: LD_VAR 0 2
40739: ARRAY
40740: PUSH
40741: LD_VAR 0 1
40745: PUSH
40746: LD_VAR 0 2
40750: PUSH
40751: LD_INT 1
40753: PLUS
40754: ARRAY
40755: PUSH
40756: EMPTY
40757: LIST
40758: LIST
40759: ST_TO_ADDR
// break ;
40760: GO 40778
// end ; i = i + 2 ;
40762: LD_ADDR_VAR 0 2
40766: PUSH
40767: LD_VAR 0 2
40771: PUSH
40772: LD_INT 2
40774: PLUS
40775: ST_TO_ADDR
// end ;
40776: GO 40677
// end ; if artifact_hex = 0 and not has_artifact_cargo then
40778: LD_VAR 0 3
40782: PUSH
40783: LD_INT 0
40785: EQUAL
40786: PUSH
40787: LD_VAR 0 5
40791: NOT
40792: AND
40793: IFFALSE 40863
// begin if cargo_bay > 0 then
40795: LD_VAR 0 4
40799: PUSH
40800: LD_INT 0
40802: GREATER
40803: IFFALSE 40853
// begin if not IsInArea ( cargo_bay , gensher_reinforcements_area ) then
40805: LD_VAR 0 4
40809: PPUSH
40810: LD_INT 6
40812: PPUSH
40813: CALL_OW 308
40817: NOT
40818: IFFALSE 40834
// ComMoveToArea ( cargo_bay , gensher_reinforcements_area ) else
40820: LD_VAR 0 4
40824: PPUSH
40825: LD_INT 6
40827: PPUSH
40828: CALL_OW 113
40832: GO 40851
// begin DestroyUnit ( cargo_bay ) ;
40834: LD_VAR 0 4
40838: PPUSH
40839: CALL_OW 65
// instant_spawn = true ;
40843: LD_ADDR_VAR 0 6
40847: PUSH
40848: LD_INT 1
40850: ST_TO_ADDR
// end ; end else
40851: GO 40861
// instant_spawn = true ;
40853: LD_ADDR_VAR 0 6
40857: PUSH
40858: LD_INT 1
40860: ST_TO_ADDR
// end else
40861: GO 41063
// begin if cargo_bay = 0 then
40863: LD_VAR 0 4
40867: PUSH
40868: LD_INT 0
40870: EQUAL
40871: IFFALSE 40968
// begin InitUc ;
40873: CALL_OW 18
// InitVc ;
40877: CALL_OW 20
// uc_side = russians ;
40881: LD_ADDR_OWVAR 20
40885: PUSH
40886: LD_EXP 3
40890: ST_TO_ADDR
// uc_nation = nation_russian ;
40891: LD_ADDR_OWVAR 21
40895: PUSH
40896: LD_INT 3
40898: ST_TO_ADDR
// vc_chassis = ru_medium_tracked ;
40899: LD_ADDR_OWVAR 37
40903: PUSH
40904: LD_INT 22
40906: ST_TO_ADDR
// vc_control = control_computer ;
40907: LD_ADDR_OWVAR 38
40911: PUSH
40912: LD_INT 3
40914: ST_TO_ADDR
// vc_engine = engine_siberite ;
40915: LD_ADDR_OWVAR 39
40919: PUSH
40920: LD_INT 3
40922: ST_TO_ADDR
// vc_weapon = ru_cargo_bay ;
40923: LD_ADDR_OWVAR 40
40927: PUSH
40928: LD_INT 51
40930: ST_TO_ADDR
// cargo_bay = CreateVehicle ;
40931: LD_ADDR_VAR 0 4
40935: PUSH
40936: CALL_OW 45
40940: ST_TO_ADDR
// SetDir ( cargo_bay , 0 ) ;
40941: LD_VAR 0 4
40945: PPUSH
40946: LD_INT 0
40948: PPUSH
40949: CALL_OW 233
// PlaceUnitArea ( cargo_bay , gensher_reinforcements_area , false ) ;
40953: LD_VAR 0 4
40957: PPUSH
40958: LD_INT 6
40960: PPUSH
40961: LD_INT 0
40963: PPUSH
40964: CALL_OW 49
// end ; if has_artifact_cargo then
40968: LD_VAR 0 5
40972: IFFALSE 41036
// begin if not IsInArea ( cargo_bay , gensher_reinforcements_area ) then
40974: LD_VAR 0 4
40978: PPUSH
40979: LD_INT 6
40981: PPUSH
40982: CALL_OW 308
40986: NOT
40987: IFFALSE 41003
// ComMoveToArea ( cargo_bay , gensher_reinforcements_area ) else
40989: LD_VAR 0 4
40993: PPUSH
40994: LD_INT 6
40996: PPUSH
40997: CALL_OW 113
41001: GO 41034
// begin RemoveUnit ( cargo_bay ) ;
41003: LD_VAR 0 4
41007: PPUSH
41008: CALL_OW 64
// ExclusiveOn ;
41012: CALL_OW 4
// wait ( 0 0$2 ) ;
41016: LD_INT 70
41018: PPUSH
41019: CALL_OW 67
// YouLost ( ArtifactRusRecap ) ;
41023: LD_STRING ArtifactRusRecap
41025: PPUSH
41026: CALL_OW 104
// ExclusiveOff ;
41030: CALL_OW 5
// end ; end else
41034: GO 41063
// ComGet ( cargo_bay , artifact_hex [ 1 ] , artifact_hex [ 2 ] ) ;
41036: LD_VAR 0 4
41040: PPUSH
41041: LD_VAR 0 3
41045: PUSH
41046: LD_INT 1
41048: ARRAY
41049: PPUSH
41050: LD_VAR 0 3
41054: PUSH
41055: LD_INT 2
41057: ARRAY
41058: PPUSH
41059: CALL_OW 160
// end ; until false ;
41063: LD_INT 0
41065: IFFALSE 40445
// end ;
41067: PPOPN 6
41069: END
// every 0 0$1 + 0 0$0.2 do var x , y , temp_list , i ;
41070: GO 41072
41072: DISABLE
41073: LD_INT 0
41075: PPUSH
41076: PPUSH
41077: PPUSH
41078: PPUSH
// begin repeat wait ( 0 0$0.5 ) ;
41079: LD_INT 18
41081: PPUSH
41082: CALL_OW 67
// temp_list = GetListOfCratesInArea ( crate_gather_area ) ^ GetListOfCratesInArea ( all_but_crate_gather_area ) ;
41086: LD_ADDR_VAR 0 3
41090: PUSH
41091: LD_INT 4
41093: PPUSH
41094: CALL_OW 435
41098: PUSH
41099: LD_INT 12
41101: PPUSH
41102: CALL_OW 435
41106: ADD
41107: ST_TO_ADDR
// x = 0 ;
41108: LD_ADDR_VAR 0 1
41112: PUSH
41113: LD_INT 0
41115: ST_TO_ADDR
// y = 0 ;
41116: LD_ADDR_VAR 0 2
41120: PUSH
41121: LD_INT 0
41123: ST_TO_ADDR
// i = 1 ;
41124: LD_ADDR_VAR 0 4
41128: PUSH
41129: LD_INT 1
41131: ST_TO_ADDR
// while i < temp_list do
41132: LD_VAR 0 4
41136: PUSH
41137: LD_VAR 0 3
41141: LESS
41142: IFFALSE 41234
// begin if GetResourceTypeXY ( temp_list [ i ] , temp_list [ i + 1 ] ) = mat_artefact then
41144: LD_VAR 0 3
41148: PUSH
41149: LD_VAR 0 4
41153: ARRAY
41154: PPUSH
41155: LD_VAR 0 3
41159: PUSH
41160: LD_VAR 0 4
41164: PUSH
41165: LD_INT 1
41167: PLUS
41168: ARRAY
41169: PPUSH
41170: CALL_OW 283
41174: PUSH
41175: LD_INT 4
41177: EQUAL
41178: IFFALSE 41218
// begin x = temp_list [ i ] ;
41180: LD_ADDR_VAR 0 1
41184: PUSH
41185: LD_VAR 0 3
41189: PUSH
41190: LD_VAR 0 4
41194: ARRAY
41195: ST_TO_ADDR
// y = temp_list [ i + 1 ] ;
41196: LD_ADDR_VAR 0 2
41200: PUSH
41201: LD_VAR 0 3
41205: PUSH
41206: LD_VAR 0 4
41210: PUSH
41211: LD_INT 1
41213: PLUS
41214: ARRAY
41215: ST_TO_ADDR
// break ;
41216: GO 41234
// end ; i = i + 2 ;
41218: LD_ADDR_VAR 0 4
41222: PUSH
41223: LD_VAR 0 4
41227: PUSH
41228: LD_INT 2
41230: PLUS
41231: ST_TO_ADDR
// end ;
41232: GO 41132
// if x > 0 and y > 0 then
41234: LD_VAR 0 1
41238: PUSH
41239: LD_INT 0
41241: GREATER
41242: PUSH
41243: LD_VAR 0 2
41247: PUSH
41248: LD_INT 0
41250: GREATER
41251: AND
41252: IFFALSE 41382
// begin if SeeXY ( you , x , y ) then
41254: LD_EXP 2
41258: PPUSH
41259: LD_VAR 0 1
41263: PPUSH
41264: LD_VAR 0 2
41268: PPUSH
41269: CALL_OW 293
41273: IFFALSE 41382
// begin CenterOnXY ( x , y ) ;
41275: LD_VAR 0 1
41279: PPUSH
41280: LD_VAR 0 2
41284: PPUSH
41285: CALL_OW 84
// DialogueOn ;
41289: CALL_OW 6
// Say ( Heike , D9-H-1 ) ;
41293: LD_EXP 7
41297: PPUSH
41298: LD_STRING D9-H-1
41300: PPUSH
41301: CALL_OW 88
// if IsOk ( Dwayne ) then
41305: LD_EXP 8
41309: PPUSH
41310: CALL_OW 302
41314: IFFALSE 41330
// Say ( Dwayne , D9-Dw-1 ) else
41316: LD_EXP 8
41320: PPUSH
41321: LD_STRING D9-Dw-1
41323: PPUSH
41324: CALL_OW 88
41328: GO 41342
// Say ( Heike , D9-H-2a ) ;
41330: LD_EXP 7
41334: PPUSH
41335: LD_STRING D9-H-2a
41337: PPUSH
41338: CALL_OW 88
// Say ( Heike , D9-H-2b ) ;
41342: LD_EXP 7
41346: PPUSH
41347: LD_STRING D9-H-2b
41349: PPUSH
41350: CALL_OW 88
// dwait ( 0 0$0.2 ) ;
41354: LD_INT 7
41356: PPUSH
41357: CALL_OW 68
// ChangeMissionObjectives ( MAddCargoBay ) ;
41361: LD_STRING MAddCargoBay
41363: PPUSH
41364: CALL_OW 337
// DialogueOff ;
41368: CALL_OW 7
// artifact_cargo_bay_status = 1 ;
41372: LD_ADDR_EXP 94
41376: PUSH
41377: LD_INT 1
41379: ST_TO_ADDR
// exit ;
41380: GO 41386
// end ; end ; until false ;
41382: LD_INT 0
41384: IFFALSE 41079
// end ;
41386: PPOPN 4
41388: END
// every 0 0$1 + 0 0$0.1 do var temp_list ;
41389: GO 41391
41391: DISABLE
41392: LD_INT 0
41394: PPUSH
// begin repeat wait ( 0 0$1 ) ;
41395: LD_INT 35
41397: PPUSH
41398: CALL_OW 67
// if artifact_cargo_bay_status = 0 then
41402: LD_EXP 94
41406: PUSH
41407: LD_INT 0
41409: EQUAL
41410: IFFALSE 41414
// continue ;
41412: GO 41395
// temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_weapon , ar_cargo_bay ] , [ f_weapon , ru_cargo_bay ] ] ] ) ;
41414: LD_ADDR_VAR 0 1
41418: PUSH
41419: LD_INT 22
41421: PUSH
41422: LD_EXP 2
41426: PUSH
41427: EMPTY
41428: LIST
41429: LIST
41430: PUSH
41431: LD_INT 2
41433: PUSH
41434: LD_INT 34
41436: PUSH
41437: LD_INT 32
41439: PUSH
41440: EMPTY
41441: LIST
41442: LIST
41443: PUSH
41444: LD_INT 34
41446: PUSH
41447: LD_INT 51
41449: PUSH
41450: EMPTY
41451: LIST
41452: LIST
41453: PUSH
41454: EMPTY
41455: LIST
41456: LIST
41457: LIST
41458: PUSH
41459: EMPTY
41460: LIST
41461: LIST
41462: PPUSH
41463: CALL_OW 69
41467: ST_TO_ADDR
// if temp_list > 0 then
41468: LD_VAR 0 1
41472: PUSH
41473: LD_INT 0
41475: GREATER
41476: IFFALSE 41505
// begin if artifact_cargo_bay_status = 1 then
41478: LD_EXP 94
41482: PUSH
41483: LD_INT 1
41485: EQUAL
41486: IFFALSE 41503
// begin ChangeMissionObjectives ( MOutCargoBay ) ;
41488: LD_STRING MOutCargoBay
41490: PPUSH
41491: CALL_OW 337
// artifact_cargo_bay_status = 2 ;
41495: LD_ADDR_EXP 94
41499: PUSH
41500: LD_INT 2
41502: ST_TO_ADDR
// end ; end else
41503: GO 41530
// begin if artifact_cargo_bay_status = 2 then
41505: LD_EXP 94
41509: PUSH
41510: LD_INT 2
41512: EQUAL
41513: IFFALSE 41530
// begin ChangeMissionObjectives ( MRefreshCargoBay ) ;
41515: LD_STRING MRefreshCargoBay
41517: PPUSH
41518: CALL_OW 337
// artifact_cargo_bay_status = 1 ;
41522: LD_ADDR_EXP 94
41526: PUSH
41527: LD_INT 1
41529: ST_TO_ADDR
// end ; end ; until false ;
41530: LD_INT 0
41532: IFFALSE 41395
// end ;
41534: PPOPN 1
41536: END
// every 0 0$1 + 0 0$0.2 trigger russians_attack = 2 do
41537: LD_EXP 84
41541: PUSH
41542: LD_INT 2
41544: EQUAL
41545: IFFALSE 41901
41547: GO 41549
41549: DISABLE
// begin wait ( 0 0$5 ) ;
41550: LD_INT 175
41552: PPUSH
41553: CALL_OW 67
// if IsDead ( Kurt ) or not time_shifting_used_in_first_attack then
41557: LD_EXP 10
41561: PPUSH
41562: CALL_OW 301
41566: PUSH
41567: LD_EXP 101
41571: NOT
41572: OR
41573: IFFALSE 41577
// exit ;
41575: GO 41901
// while time_shift_hexes > 0 do
41577: LD_EXP 96
41581: PUSH
41582: LD_INT 0
41584: GREATER
41585: IFFALSE 41596
// wait ( 0 0$2 ) ;
41587: LD_INT 70
41589: PPUSH
41590: CALL_OW 67
41594: GO 41577
// DialogueOn ;
41596: CALL_OW 6
// if IsLive ( Oswald ) then
41600: LD_EXP 9
41604: PPUSH
41605: CALL_OW 300
41609: IFFALSE 41644
// if not oswald_is_substitute then
41611: LD_EXP 62
41615: NOT
41616: IFFALSE 41632
// ForceSay ( Oswald , D10-Os-1 ) else
41618: LD_EXP 9
41622: PPUSH
41623: LD_STRING D10-Os-1
41625: PPUSH
41626: CALL_OW 91
41630: GO 41644
// ForceSay ( Oswald , D10-Os_sub-1 ) ;
41632: LD_EXP 9
41636: PPUSH
41637: LD_STRING D10-Os_sub-1
41639: PPUSH
41640: CALL_OW 91
// if IsLive ( Dwayne ) then
41644: LD_EXP 8
41648: PPUSH
41649: CALL_OW 300
41653: IFFALSE 41681
// begin ForceSay ( Dwayne , D10-Dw-1 ) ;
41655: LD_EXP 8
41659: PPUSH
41660: LD_STRING D10-Dw-1
41662: PPUSH
41663: CALL_OW 91
// ForceSay ( Heike , D10-H-1a ) ;
41667: LD_EXP 7
41671: PPUSH
41672: LD_STRING D10-H-1a
41674: PPUSH
41675: CALL_OW 91
// end else
41679: GO 41693
// ForceSay ( Heike , D10-H-1b ) ;
41681: LD_EXP 7
41685: PPUSH
41686: LD_STRING D10-H-1b
41688: PPUSH
41689: CALL_OW 91
// if not kurt_is_substitute then
41693: LD_EXP 63
41697: NOT
41698: IFFALSE 41714
// ForceSay ( Kurt , D10-Ku-1 ) else
41700: LD_EXP 10
41704: PPUSH
41705: LD_STRING D10-Ku-1
41707: PPUSH
41708: CALL_OW 91
41712: GO 41726
// ForceSay ( Kurt , D10-Ku_sub-1 ) ;
41714: LD_EXP 10
41718: PPUSH
41719: LD_STRING D10-Ku_sub-1
41721: PPUSH
41722: CALL_OW 91
// ForceSay ( Heike , D10-H-2 ) ;
41726: LD_EXP 7
41730: PPUSH
41731: LD_STRING D10-H-2
41733: PPUSH
41734: CALL_OW 91
// if not kurt_is_substitute then
41738: LD_EXP 63
41742: NOT
41743: IFFALSE 41759
// ForceSay ( Kurt , D10-Ku-2 ) else
41745: LD_EXP 10
41749: PPUSH
41750: LD_STRING D10-Ku-2
41752: PPUSH
41753: CALL_OW 91
41757: GO 41771
// ForceSay ( Kurt , D10-Ku_sub-2 ) ;
41759: LD_EXP 10
41763: PPUSH
41764: LD_STRING D10-Ku_sub-2
41766: PPUSH
41767: CALL_OW 91
// ForceSay ( Heike , D10-H-3 ) ;
41771: LD_EXP 7
41775: PPUSH
41776: LD_STRING D10-H-3
41778: PPUSH
41779: CALL_OW 91
// if not kurt_is_substitute then
41783: LD_EXP 63
41787: NOT
41788: IFFALSE 41804
// ForceSay ( Kurt , D10-Ku-3 ) else
41790: LD_EXP 10
41794: PPUSH
41795: LD_STRING D10-Ku-3
41797: PPUSH
41798: CALL_OW 91
41802: GO 41816
// ForceSay ( Kurt , D10-Ku_sub-3 ) ;
41804: LD_EXP 10
41808: PPUSH
41809: LD_STRING D10-Ku_sub-3
41811: PPUSH
41812: CALL_OW 91
// ForceSay ( Heike , D10-H-4 ) ;
41816: LD_EXP 7
41820: PPUSH
41821: LD_STRING D10-H-4
41823: PPUSH
41824: CALL_OW 91
// if not kurt_is_substitute then
41828: LD_EXP 63
41832: NOT
41833: IFFALSE 41849
// ForceSay ( Kurt , D10-Ku-4 ) else
41835: LD_EXP 10
41839: PPUSH
41840: LD_STRING D10-Ku-4
41842: PPUSH
41843: CALL_OW 91
41847: GO 41861
// ForceSay ( Kurt , D10-Ku_sub-4 ) ;
41849: LD_EXP 10
41853: PPUSH
41854: LD_STRING D10-Ku_sub-4
41856: PPUSH
41857: CALL_OW 91
// DialogueOff ;
41861: CALL_OW 7
// investigate_time_shifting = 1 ;
41865: LD_ADDR_EXP 95
41869: PUSH
41870: LD_INT 1
41872: ST_TO_ADDR
// wait ( 0 0$0.3 ) ;
41873: LD_INT 10
41875: PPUSH
41876: CALL_OW 67
// ChangeMissionObjectives ( MAddTimeShift ) ;
41880: LD_STRING MAddTimeShift
41882: PPUSH
41883: CALL_OW 337
// wait ( 0 0$0.2 ) ;
41887: LD_INT 7
41889: PPUSH
41890: CALL_OW 67
// Query ( QTimeShiftInvestigateInfo ) ;
41894: LD_STRING QTimeShiftInvestigateInfo
41896: PPUSH
41897: CALL_OW 97
// end ;
41901: END
// every 0 0$1 + 0 0$0.2 trigger investigate_time_shifting = 1 do var temp_list , i , vehicles_list , temp_list_2 , k , dist , temp_value ; var data_status ;
41902: LD_EXP 95
41906: PUSH
41907: LD_INT 1
41909: EQUAL
41910: IFFALSE 42801
41912: GO 41914
41914: DISABLE
41915: LD_INT 0
41917: PPUSH
41918: PPUSH
41919: PPUSH
41920: PPUSH
41921: PPUSH
41922: PPUSH
41923: PPUSH
41924: PPUSH
// begin data_status = 1 ;
41925: LD_ADDR_VAR 0 8
41929: PUSH
41930: LD_INT 1
41932: ST_TO_ADDR
// repeat wait ( [ 28 , 38 , 48 ] [ difficulty ] ) ;
41933: LD_INT 28
41935: PUSH
41936: LD_INT 38
41938: PUSH
41939: LD_INT 48
41941: PUSH
41942: EMPTY
41943: LIST
41944: LIST
41945: LIST
41946: PUSH
41947: LD_OWVAR 67
41951: ARRAY
41952: PPUSH
41953: CALL_OW 67
// for i in FilterAllUnits ( [ [ f_side , you ] , [ f_control , control_remote ] , [ f_weapon , ar_radar ] ] ) do
41957: LD_ADDR_VAR 0 2
41961: PUSH
41962: LD_INT 22
41964: PUSH
41965: LD_EXP 2
41969: PUSH
41970: EMPTY
41971: LIST
41972: LIST
41973: PUSH
41974: LD_INT 33
41976: PUSH
41977: LD_INT 2
41979: PUSH
41980: EMPTY
41981: LIST
41982: LIST
41983: PUSH
41984: LD_INT 34
41986: PUSH
41987: LD_INT 30
41989: PUSH
41990: EMPTY
41991: LIST
41992: LIST
41993: PUSH
41994: EMPTY
41995: LIST
41996: LIST
41997: LIST
41998: PPUSH
41999: CALL_OW 69
42003: PUSH
42004: FOR_IN
42005: IFFALSE 42021
// SetUnitDisplayNumber ( i , 0 ) ;
42007: LD_VAR 0 2
42011: PPUSH
42012: LD_INT 0
42014: PPUSH
42015: CALL_OW 505
42019: GO 42004
42021: POP
42022: POP
// if data_status = 15 then
42023: LD_VAR 0 8
42027: PUSH
42028: LD_INT 15
42030: EQUAL
42031: IFFALSE 42050
// begin investigate_time_shifting = 2 ;
42033: LD_ADDR_EXP 95
42037: PUSH
42038: LD_INT 2
42040: ST_TO_ADDR
// ChangeMissionObjectives ( MOutTimeShift ) ;
42041: LD_STRING MOutTimeShift
42043: PPUSH
42044: CALL_OW 337
// exit ;
42048: GO 42801
// end ; temp_list = FilterAllUnits ( [ [ f_side , you ] , [ f_control , control_remote ] , [ f_weapon , ar_radar ] , [ f_ok ] , [ f_linked ] ] ) ;
42050: LD_ADDR_VAR 0 1
42054: PUSH
42055: LD_INT 22
42057: PUSH
42058: LD_EXP 2
42062: PUSH
42063: EMPTY
42064: LIST
42065: LIST
42066: PUSH
42067: LD_INT 33
42069: PUSH
42070: LD_INT 2
42072: PUSH
42073: EMPTY
42074: LIST
42075: LIST
42076: PUSH
42077: LD_INT 34
42079: PUSH
42080: LD_INT 30
42082: PUSH
42083: EMPTY
42084: LIST
42085: LIST
42086: PUSH
42087: LD_INT 50
42089: PUSH
42090: EMPTY
42091: LIST
42092: PUSH
42093: LD_INT 61
42095: PUSH
42096: EMPTY
42097: LIST
42098: PUSH
42099: EMPTY
42100: LIST
42101: LIST
42102: LIST
42103: LIST
42104: LIST
42105: PPUSH
42106: CALL_OW 69
42110: ST_TO_ADDR
// temp_list_2 = [ ] ;
42111: LD_ADDR_VAR 0 4
42115: PUSH
42116: EMPTY
42117: ST_TO_ADDR
// for i in temp_list do
42118: LD_ADDR_VAR 0 2
42122: PUSH
42123: LD_VAR 0 1
42127: PUSH
42128: FOR_IN
42129: IFFALSE 42154
// temp_list_2 = temp_list_2 ^ IsControledBy ( i ) ;
42131: LD_ADDR_VAR 0 4
42135: PUSH
42136: LD_VAR 0 4
42140: PUSH
42141: LD_VAR 0 2
42145: PPUSH
42146: CALL_OW 312
42150: ADD
42151: ST_TO_ADDR
42152: GO 42128
42154: POP
42155: POP
// temp_list = SortListByListDesc ( temp_list , temp_list_2 ) ;
42156: LD_ADDR_VAR 0 1
42160: PUSH
42161: LD_VAR 0 1
42165: PPUSH
42166: LD_VAR 0 4
42170: PPUSH
42171: CALL_OW 77
42175: ST_TO_ADDR
// temp_list_2 = SortListByListDesc ( temp_list_2 , temp_list_2 ) ;
42176: LD_ADDR_VAR 0 4
42180: PUSH
42181: LD_VAR 0 4
42185: PPUSH
42186: LD_VAR 0 4
42190: PPUSH
42191: CALL_OW 77
42195: ST_TO_ADDR
// vehicles_list = [ ] ;
42196: LD_ADDR_VAR 0 3
42200: PUSH
42201: EMPTY
42202: ST_TO_ADDR
// i = 1 ;
42203: LD_ADDR_VAR 0 2
42207: PUSH
42208: LD_INT 1
42210: ST_TO_ADDR
// while i < temp_list do
42211: LD_VAR 0 2
42215: PUSH
42216: LD_VAR 0 1
42220: LESS
42221: IFFALSE 42400
// begin if temp_list_2 [ i ] = 0 then
42223: LD_VAR 0 4
42227: PUSH
42228: LD_VAR 0 2
42232: ARRAY
42233: PUSH
42234: LD_INT 0
42236: EQUAL
42237: IFFALSE 42241
// break ;
42239: GO 42400
// if temp_list_2 [ i ] = temp_list_2 [ i + 1 ] then
42241: LD_VAR 0 4
42245: PUSH
42246: LD_VAR 0 2
42250: ARRAY
42251: PUSH
42252: LD_VAR 0 4
42256: PUSH
42257: LD_VAR 0 2
42261: PUSH
42262: LD_INT 1
42264: PLUS
42265: ARRAY
42266: EQUAL
42267: IFFALSE 42384
// begin vehicles_list = [ temp_list [ i ] , temp_list [ i + 1 ] ] ;
42269: LD_ADDR_VAR 0 3
42273: PUSH
42274: LD_VAR 0 1
42278: PUSH
42279: LD_VAR 0 2
42283: ARRAY
42284: PUSH
42285: LD_VAR 0 1
42289: PUSH
42290: LD_VAR 0 2
42294: PUSH
42295: LD_INT 1
42297: PLUS
42298: ARRAY
42299: PUSH
42300: EMPTY
42301: LIST
42302: LIST
42303: ST_TO_ADDR
// for k = i + 2 to temp_list_2 do
42304: LD_ADDR_VAR 0 5
42308: PUSH
42309: DOUBLE
42310: LD_VAR 0 2
42314: PUSH
42315: LD_INT 2
42317: PLUS
42318: DEC
42319: ST_TO_ADDR
42320: LD_VAR 0 4
42324: PUSH
42325: FOR_TO
42326: IFFALSE 42380
// if temp_list_2 [ i ] = temp_list_2 [ k ] then
42328: LD_VAR 0 4
42332: PUSH
42333: LD_VAR 0 2
42337: ARRAY
42338: PUSH
42339: LD_VAR 0 4
42343: PUSH
42344: LD_VAR 0 5
42348: ARRAY
42349: EQUAL
42350: IFFALSE 42376
// vehicles_list = vehicles_list ^ temp_list [ k ] else
42352: LD_ADDR_VAR 0 3
42356: PUSH
42357: LD_VAR 0 3
42361: PUSH
42362: LD_VAR 0 1
42366: PUSH
42367: LD_VAR 0 5
42371: ARRAY
42372: ADD
42373: ST_TO_ADDR
42374: GO 42378
// break ;
42376: GO 42380
42378: GO 42325
42380: POP
42381: POP
// break ;
42382: GO 42400
// end ; i = i + 1 ;
42384: LD_ADDR_VAR 0 2
42388: PUSH
42389: LD_VAR 0 2
42393: PUSH
42394: LD_INT 1
42396: PLUS
42397: ST_TO_ADDR
// end ;
42398: GO 42211
// if vehicles_list = 0 then
42400: LD_VAR 0 3
42404: PUSH
42405: LD_INT 0
42407: EQUAL
42408: IFFALSE 42412
// continue ;
42410: GO 41933
// if vehicles_list > 2 then
42412: LD_VAR 0 3
42416: PUSH
42417: LD_INT 2
42419: GREATER
42420: IFFALSE 42626
// begin dist = GetDistUnits ( vehicles_list [ 1 ] , vehicles_list [ 2 ] ) ;
42422: LD_ADDR_VAR 0 6
42426: PUSH
42427: LD_VAR 0 3
42431: PUSH
42432: LD_INT 1
42434: ARRAY
42435: PPUSH
42436: LD_VAR 0 3
42440: PUSH
42441: LD_INT 2
42443: ARRAY
42444: PPUSH
42445: CALL_OW 296
42449: ST_TO_ADDR
// temp_list = [ vehicles_list [ 1 ] , vehicles_list [ 2 ] ] ;
42450: LD_ADDR_VAR 0 1
42454: PUSH
42455: LD_VAR 0 3
42459: PUSH
42460: LD_INT 1
42462: ARRAY
42463: PUSH
42464: LD_VAR 0 3
42468: PUSH
42469: LD_INT 2
42471: ARRAY
42472: PUSH
42473: EMPTY
42474: LIST
42475: LIST
42476: ST_TO_ADDR
// for i = 1 to vehicles_list - 1 do
42477: LD_ADDR_VAR 0 2
42481: PUSH
42482: DOUBLE
42483: LD_INT 1
42485: DEC
42486: ST_TO_ADDR
42487: LD_VAR 0 3
42491: PUSH
42492: LD_INT 1
42494: MINUS
42495: PUSH
42496: FOR_TO
42497: IFFALSE 42614
// for k = i + 1 to vehicles_list do
42499: LD_ADDR_VAR 0 5
42503: PUSH
42504: DOUBLE
42505: LD_VAR 0 2
42509: PUSH
42510: LD_INT 1
42512: PLUS
42513: DEC
42514: ST_TO_ADDR
42515: LD_VAR 0 3
42519: PUSH
42520: FOR_TO
42521: IFFALSE 42610
// begin temp_value = GetDistUnits ( vehicles_list [ i ] , vehicles_list [ k ] ) ;
42523: LD_ADDR_VAR 0 7
42527: PUSH
42528: LD_VAR 0 3
42532: PUSH
42533: LD_VAR 0 2
42537: ARRAY
42538: PPUSH
42539: LD_VAR 0 3
42543: PUSH
42544: LD_VAR 0 5
42548: ARRAY
42549: PPUSH
42550: CALL_OW 296
42554: ST_TO_ADDR
// if temp_value < dist then
42555: LD_VAR 0 7
42559: PUSH
42560: LD_VAR 0 6
42564: LESS
42565: IFFALSE 42608
// begin dist = temp_value ;
42567: LD_ADDR_VAR 0 6
42571: PUSH
42572: LD_VAR 0 7
42576: ST_TO_ADDR
// temp_list = [ vehicles_list [ i ] , vehicles_list [ k ] ] ;
42577: LD_ADDR_VAR 0 1
42581: PUSH
42582: LD_VAR 0 3
42586: PUSH
42587: LD_VAR 0 2
42591: ARRAY
42592: PUSH
42593: LD_VAR 0 3
42597: PUSH
42598: LD_VAR 0 5
42602: ARRAY
42603: PUSH
42604: EMPTY
42605: LIST
42606: LIST
42607: ST_TO_ADDR
// end ; end ;
42608: GO 42520
42610: POP
42611: POP
42612: GO 42496
42614: POP
42615: POP
// vehicles_list = temp_list ;
42616: LD_ADDR_VAR 0 3
42620: PUSH
42621: LD_VAR 0 1
42625: ST_TO_ADDR
// end ; if GetDistUnits ( vehicles_list [ 1 ] , vehicles_list [ 2 ] ) > [ 15 , 12 , 9 ] [ difficulty ] then
42626: LD_VAR 0 3
42630: PUSH
42631: LD_INT 1
42633: ARRAY
42634: PPUSH
42635: LD_VAR 0 3
42639: PUSH
42640: LD_INT 2
42642: ARRAY
42643: PPUSH
42644: CALL_OW 296
42648: PUSH
42649: LD_INT 15
42651: PUSH
42652: LD_INT 12
42654: PUSH
42655: LD_INT 9
42657: PUSH
42658: EMPTY
42659: LIST
42660: LIST
42661: LIST
42662: PUSH
42663: LD_OWVAR 67
42667: ARRAY
42668: GREATER
42669: IFFALSE 42673
// continue ;
42671: GO 41933
// temp_list = [ UnitInTimeShiftedArea ( vehicles_list [ 1 ] ) , UnitInTimeShiftedArea ( vehicles_list [ 2 ] ) ] ;
42673: LD_ADDR_VAR 0 1
42677: PUSH
42678: LD_VAR 0 3
42682: PUSH
42683: LD_INT 1
42685: ARRAY
42686: PPUSH
42687: CALL 42804 0 1
42691: PUSH
42692: LD_VAR 0 3
42696: PUSH
42697: LD_INT 2
42699: ARRAY
42700: PPUSH
42701: CALL 42804 0 1
42705: PUSH
42706: EMPTY
42707: LIST
42708: LIST
42709: ST_TO_ADDR
// if ( temp_list [ 1 ] and not temp_list [ 2 ] ) or ( not temp_list [ 1 ] and temp_list [ 2 ] ) then
42710: LD_VAR 0 1
42714: PUSH
42715: LD_INT 1
42717: ARRAY
42718: PUSH
42719: LD_VAR 0 1
42723: PUSH
42724: LD_INT 2
42726: ARRAY
42727: NOT
42728: AND
42729: PUSH
42730: LD_VAR 0 1
42734: PUSH
42735: LD_INT 1
42737: ARRAY
42738: NOT
42739: PUSH
42740: LD_VAR 0 1
42744: PUSH
42745: LD_INT 2
42747: ARRAY
42748: AND
42749: OR
42750: IFFALSE 42766
// data_status = data_status + 1 ;
42752: LD_ADDR_VAR 0 8
42756: PUSH
42757: LD_VAR 0 8
42761: PUSH
42762: LD_INT 1
42764: PLUS
42765: ST_TO_ADDR
// for i in vehicles_list do
42766: LD_ADDR_VAR 0 2
42770: PUSH
42771: LD_VAR 0 3
42775: PUSH
42776: FOR_IN
42777: IFFALSE 42795
// SetUnitDisplayNumber ( i , data_status ) ;
42779: LD_VAR 0 2
42783: PPUSH
42784: LD_VAR 0 8
42788: PPUSH
42789: CALL_OW 505
42793: GO 42776
42795: POP
42796: POP
// until false ;
42797: LD_INT 0
42799: IFFALSE 41933
// end ;
42801: PPOPN 8
42803: END
// function UnitInTimeShiftedArea ( un ) ; var i ; begin
42804: LD_INT 0
42806: PPUSH
42807: PPUSH
// result = false ;
42808: LD_ADDR_VAR 0 2
42812: PUSH
42813: LD_INT 0
42815: ST_TO_ADDR
// for i in time_shift_hexes do
42816: LD_ADDR_VAR 0 3
42820: PUSH
42821: LD_EXP 96
42825: PUSH
42826: FOR_IN
42827: IFFALSE 42888
// if GetDistUnitXY ( un , i [ 1 ] , i [ 2 ] ) <= time_shift_data [ russians ] [ 2 ] then
42829: LD_VAR 0 1
42833: PPUSH
42834: LD_VAR 0 3
42838: PUSH
42839: LD_INT 1
42841: ARRAY
42842: PPUSH
42843: LD_VAR 0 3
42847: PUSH
42848: LD_INT 2
42850: ARRAY
42851: PPUSH
42852: CALL_OW 297
42856: PUSH
42857: LD_EXP 97
42861: PUSH
42862: LD_EXP 3
42866: ARRAY
42867: PUSH
42868: LD_INT 2
42870: ARRAY
42871: LESSEQUAL
42872: IFFALSE 42886
// begin result = true ;
42874: LD_ADDR_VAR 0 2
42878: PUSH
42879: LD_INT 1
42881: ST_TO_ADDR
// exit ;
42882: POP
42883: POP
42884: GO 42890
// end ;
42886: GO 42826
42888: POP
42889: POP
// end ; end_of_file
42890: LD_VAR 0 2
42894: RET
// every 0 0$1 + 0 0$0.4 do
42895: GO 42897
42897: DISABLE
// begin wait ( Rand ( 1 1$30 , 2 2$0 ) ) ;
42898: LD_INT 3150
42900: PPUSH
42901: LD_INT 4200
42903: PPUSH
42904: CALL_OW 12
42908: PPUSH
42909: CALL_OW 67
// CreateCratesAnywhere ( Rand ( 3 , 5 ) , true ) ;
42913: LD_INT 3
42915: PPUSH
42916: LD_INT 5
42918: PPUSH
42919: CALL_OW 12
42923: PPUSH
42924: LD_INT 1
42926: PPUSH
42927: CALL_OW 57
// enable ;
42931: ENABLE
// end ;
42932: END
// export function PrepareCrates ; var all , i ; begin
42933: LD_INT 0
42935: PPUSH
42936: PPUSH
42937: PPUSH
// all = [ 40 , 30 , 20 ] [ difficulty ] ;
42938: LD_ADDR_VAR 0 2
42942: PUSH
42943: LD_INT 40
42945: PUSH
42946: LD_INT 30
42948: PUSH
42949: LD_INT 20
42951: PUSH
42952: EMPTY
42953: LIST
42954: LIST
42955: LIST
42956: PUSH
42957: LD_OWVAR 67
42961: ARRAY
42962: ST_TO_ADDR
// repeat if all >= 5 then
42963: LD_VAR 0 2
42967: PUSH
42968: LD_INT 5
42970: GREATEREQUAL
42971: IFFALSE 42991
// i = Rand ( 2 , 5 ) else
42973: LD_ADDR_VAR 0 3
42977: PUSH
42978: LD_INT 2
42980: PPUSH
42981: LD_INT 5
42983: PPUSH
42984: CALL_OW 12
42988: ST_TO_ADDR
42989: GO 43001
// i = all ;
42991: LD_ADDR_VAR 0 3
42995: PUSH
42996: LD_VAR 0 2
43000: ST_TO_ADDR
// all = all - i ;
43001: LD_ADDR_VAR 0 2
43005: PUSH
43006: LD_VAR 0 2
43010: PUSH
43011: LD_VAR 0 3
43015: MINUS
43016: ST_TO_ADDR
// CreateCratesAnywhere ( i , false ) ;
43017: LD_VAR 0 3
43021: PPUSH
43022: LD_INT 0
43024: PPUSH
43025: CALL_OW 57
// until all <= 0 ;
43029: LD_VAR 0 2
43033: PUSH
43034: LD_INT 0
43036: LESSEQUAL
43037: IFFALSE 42963
// end ; end_of_file
43039: LD_VAR 0 1
43043: RET
// every 0 0$1 + 0 0$0.2 trigger russians_attack in [ 1 , 3 ] do var i , temp_list , temp_list_2 , val , un1 , un2 , strat , mechanics_as_soldiers , temp_value , temp_unit , group_ready , split ; var vehicles , soldiers , mechanics , side , attack_hexes , hex_index , hex_index_gather , all_are_placed , ready_to_attack ; var unit_hex_index ;
43044: LD_EXP 84
43048: PUSH
43049: LD_INT 1
43051: PUSH
43052: LD_INT 3
43054: PUSH
43055: EMPTY
43056: LIST
43057: LIST
43058: IN
43059: IFFALSE 46984
43061: GO 43063
43063: DISABLE
43064: LD_INT 0
43066: PPUSH
43067: PPUSH
43068: PPUSH
43069: PPUSH
43070: PPUSH
43071: PPUSH
43072: PPUSH
43073: PPUSH
43074: PPUSH
43075: PPUSH
43076: PPUSH
43077: PPUSH
43078: PPUSH
43079: PPUSH
43080: PPUSH
43081: PPUSH
43082: PPUSH
43083: PPUSH
43084: PPUSH
43085: PPUSH
43086: PPUSH
43087: PPUSH
// begin side = russians ;
43088: LD_ADDR_VAR 0 16
43092: PUSH
43093: LD_EXP 3
43097: ST_TO_ADDR
// vehicles = [ [ ] , [ ] , [ ] ] ;
43098: LD_ADDR_VAR 0 13
43102: PUSH
43103: EMPTY
43104: PUSH
43105: EMPTY
43106: PUSH
43107: EMPTY
43108: PUSH
43109: EMPTY
43110: LIST
43111: LIST
43112: LIST
43113: ST_TO_ADDR
// soldiers = [ [ ] , [ ] , [ ] ] ;
43114: LD_ADDR_VAR 0 14
43118: PUSH
43119: EMPTY
43120: PUSH
43121: EMPTY
43122: PUSH
43123: EMPTY
43124: PUSH
43125: EMPTY
43126: LIST
43127: LIST
43128: LIST
43129: ST_TO_ADDR
// mechanics = [ [ ] , [ ] , [ ] ] ;
43130: LD_ADDR_VAR 0 15
43134: PUSH
43135: EMPTY
43136: PUSH
43137: EMPTY
43138: PUSH
43139: EMPTY
43140: PUSH
43141: EMPTY
43142: LIST
43143: LIST
43144: LIST
43145: ST_TO_ADDR
// attack_hexes = [ [ [ 102 , 90 ] , [ 114 , 85 ] , [ 124 , 79 ] , [ 145 , 87 ] , [ 156 , 85 ] , [ 168 , 82 ] , ai_human_pullback_hex [ 1 ] ] , [ [ 116 , 15 ] , [ 127 , 16 ] , [ 129 , 38 ] , [ 141 , 51 ] , [ 151 , 61 ] , [ 162 , 70 ] , ai_human_pullback_hex [ 1 ] ] , [ [ 149 , 18 ] , [ 163 , 26 ] , [ 170 , 35 ] , [ 176 , 45 ] , [ 177 , 58 ] , ai_human_pullback_hex [ 1 ] ] ] ;
43146: LD_ADDR_VAR 0 17
43150: PUSH
43151: LD_INT 102
43153: PUSH
43154: LD_INT 90
43156: PUSH
43157: EMPTY
43158: LIST
43159: LIST
43160: PUSH
43161: LD_INT 114
43163: PUSH
43164: LD_INT 85
43166: PUSH
43167: EMPTY
43168: LIST
43169: LIST
43170: PUSH
43171: LD_INT 124
43173: PUSH
43174: LD_INT 79
43176: PUSH
43177: EMPTY
43178: LIST
43179: LIST
43180: PUSH
43181: LD_INT 145
43183: PUSH
43184: LD_INT 87
43186: PUSH
43187: EMPTY
43188: LIST
43189: LIST
43190: PUSH
43191: LD_INT 156
43193: PUSH
43194: LD_INT 85
43196: PUSH
43197: EMPTY
43198: LIST
43199: LIST
43200: PUSH
43201: LD_INT 168
43203: PUSH
43204: LD_INT 82
43206: PUSH
43207: EMPTY
43208: LIST
43209: LIST
43210: PUSH
43211: LD_EXP 31
43215: PUSH
43216: LD_INT 1
43218: ARRAY
43219: PUSH
43220: EMPTY
43221: LIST
43222: LIST
43223: LIST
43224: LIST
43225: LIST
43226: LIST
43227: LIST
43228: PUSH
43229: LD_INT 116
43231: PUSH
43232: LD_INT 15
43234: PUSH
43235: EMPTY
43236: LIST
43237: LIST
43238: PUSH
43239: LD_INT 127
43241: PUSH
43242: LD_INT 16
43244: PUSH
43245: EMPTY
43246: LIST
43247: LIST
43248: PUSH
43249: LD_INT 129
43251: PUSH
43252: LD_INT 38
43254: PUSH
43255: EMPTY
43256: LIST
43257: LIST
43258: PUSH
43259: LD_INT 141
43261: PUSH
43262: LD_INT 51
43264: PUSH
43265: EMPTY
43266: LIST
43267: LIST
43268: PUSH
43269: LD_INT 151
43271: PUSH
43272: LD_INT 61
43274: PUSH
43275: EMPTY
43276: LIST
43277: LIST
43278: PUSH
43279: LD_INT 162
43281: PUSH
43282: LD_INT 70
43284: PUSH
43285: EMPTY
43286: LIST
43287: LIST
43288: PUSH
43289: LD_EXP 31
43293: PUSH
43294: LD_INT 1
43296: ARRAY
43297: PUSH
43298: EMPTY
43299: LIST
43300: LIST
43301: LIST
43302: LIST
43303: LIST
43304: LIST
43305: LIST
43306: PUSH
43307: LD_INT 149
43309: PUSH
43310: LD_INT 18
43312: PUSH
43313: EMPTY
43314: LIST
43315: LIST
43316: PUSH
43317: LD_INT 163
43319: PUSH
43320: LD_INT 26
43322: PUSH
43323: EMPTY
43324: LIST
43325: LIST
43326: PUSH
43327: LD_INT 170
43329: PUSH
43330: LD_INT 35
43332: PUSH
43333: EMPTY
43334: LIST
43335: LIST
43336: PUSH
43337: LD_INT 176
43339: PUSH
43340: LD_INT 45
43342: PUSH
43343: EMPTY
43344: LIST
43345: LIST
43346: PUSH
43347: LD_INT 177
43349: PUSH
43350: LD_INT 58
43352: PUSH
43353: EMPTY
43354: LIST
43355: LIST
43356: PUSH
43357: LD_EXP 31
43361: PUSH
43362: LD_INT 1
43364: ARRAY
43365: PUSH
43366: EMPTY
43367: LIST
43368: LIST
43369: LIST
43370: LIST
43371: LIST
43372: LIST
43373: PUSH
43374: EMPTY
43375: LIST
43376: LIST
43377: LIST
43378: ST_TO_ADDR
// hex_index = [ 1 , 1 , 1 ] ;
43379: LD_ADDR_VAR 0 18
43383: PUSH
43384: LD_INT 1
43386: PUSH
43387: LD_INT 1
43389: PUSH
43390: LD_INT 1
43392: PUSH
43393: EMPTY
43394: LIST
43395: LIST
43396: LIST
43397: ST_TO_ADDR
// hex_index_gather = [ 4 , 3 , 1 ] ;
43398: LD_ADDR_VAR 0 19
43402: PUSH
43403: LD_INT 4
43405: PUSH
43406: LD_INT 3
43408: PUSH
43409: LD_INT 1
43411: PUSH
43412: EMPTY
43413: LIST
43414: LIST
43415: LIST
43416: ST_TO_ADDR
// unit_hex_index = [ ] ;
43417: LD_ADDR_VAR 0 22
43421: PUSH
43422: EMPTY
43423: ST_TO_ADDR
// split = [ 0 , 1 , 2 ] [ difficulty ] ;
43424: LD_ADDR_VAR 0 12
43428: PUSH
43429: LD_INT 0
43431: PUSH
43432: LD_INT 1
43434: PUSH
43435: LD_INT 2
43437: PUSH
43438: EMPTY
43439: LIST
43440: LIST
43441: LIST
43442: PUSH
43443: LD_OWVAR 67
43447: ARRAY
43448: ST_TO_ADDR
// for strat = 1 to 3 do
43449: LD_ADDR_VAR 0 7
43453: PUSH
43454: DOUBLE
43455: LD_INT 1
43457: DEC
43458: ST_TO_ADDR
43459: LD_INT 3
43461: PUSH
43462: FOR_TO
43463: IFFALSE 44460
// begin case strat of 1 :
43465: LD_VAR 0 7
43469: PUSH
43470: LD_INT 1
43472: DOUBLE
43473: EQUAL
43474: IFTRUE 43478
43476: GO 43489
43478: POP
// temp_value = 0 ; 2 :
43479: LD_ADDR_VAR 0 9
43483: PUSH
43484: LD_INT 0
43486: ST_TO_ADDR
43487: GO 43528
43489: LD_INT 2
43491: DOUBLE
43492: EQUAL
43493: IFTRUE 43497
43495: GO 43508
43497: POP
// temp_value = 2 ; 3 :
43498: LD_ADDR_VAR 0 9
43502: PUSH
43503: LD_INT 2
43505: ST_TO_ADDR
43506: GO 43528
43508: LD_INT 3
43510: DOUBLE
43511: EQUAL
43512: IFTRUE 43516
43514: GO 43527
43516: POP
// temp_value = 3 ; end ;
43517: LD_ADDR_VAR 0 9
43521: PUSH
43522: LD_INT 3
43524: ST_TO_ADDR
43525: GO 43528
43527: POP
// case russians_attack of 1 :
43528: LD_EXP 84
43532: PUSH
43533: LD_INT 1
43535: DOUBLE
43536: EQUAL
43537: IFTRUE 43541
43539: GO 43660
43541: POP
// begin case strat of 1 :
43542: LD_VAR 0 7
43546: PUSH
43547: LD_INT 1
43549: DOUBLE
43550: EQUAL
43551: IFTRUE 43555
43553: GO 43581
43555: POP
// temp_list_2 = [ difficulty - 1 , difficulty ] ; 2 :
43556: LD_ADDR_VAR 0 3
43560: PUSH
43561: LD_OWVAR 67
43565: PUSH
43566: LD_INT 1
43568: MINUS
43569: PUSH
43570: LD_OWVAR 67
43574: PUSH
43575: EMPTY
43576: LIST
43577: LIST
43578: ST_TO_ADDR
43579: GO 43658
43581: LD_INT 2
43583: DOUBLE
43584: EQUAL
43585: IFTRUE 43589
43587: GO 43615
43589: POP
// temp_list_2 = [ difficulty - 1 , difficulty ] ; 3 :
43590: LD_ADDR_VAR 0 3
43594: PUSH
43595: LD_OWVAR 67
43599: PUSH
43600: LD_INT 1
43602: MINUS
43603: PUSH
43604: LD_OWVAR 67
43608: PUSH
43609: EMPTY
43610: LIST
43611: LIST
43612: ST_TO_ADDR
43613: GO 43658
43615: LD_INT 3
43617: DOUBLE
43618: EQUAL
43619: IFTRUE 43623
43621: GO 43657
43623: POP
// temp_list_2 = [ difficulty + Rand ( 0 , 1 ) , difficulty ] ; end ;
43624: LD_ADDR_VAR 0 3
43628: PUSH
43629: LD_OWVAR 67
43633: PUSH
43634: LD_INT 0
43636: PPUSH
43637: LD_INT 1
43639: PPUSH
43640: CALL_OW 12
43644: PLUS
43645: PUSH
43646: LD_OWVAR 67
43650: PUSH
43651: EMPTY
43652: LIST
43653: LIST
43654: ST_TO_ADDR
43655: GO 43658
43657: POP
// end ; 3 :
43658: GO 43780
43660: LD_INT 3
43662: DOUBLE
43663: EQUAL
43664: IFTRUE 43668
43666: GO 43779
43668: POP
// begin case strat of 1 :
43669: LD_VAR 0 7
43673: PUSH
43674: LD_INT 1
43676: DOUBLE
43677: EQUAL
43678: IFTRUE 43682
43680: GO 43704
43682: POP
// temp_list_2 = [ difficulty , difficulty ] ; 2 :
43683: LD_ADDR_VAR 0 3
43687: PUSH
43688: LD_OWVAR 67
43692: PUSH
43693: LD_OWVAR 67
43697: PUSH
43698: EMPTY
43699: LIST
43700: LIST
43701: ST_TO_ADDR
43702: GO 43777
43704: LD_INT 2
43706: DOUBLE
43707: EQUAL
43708: IFTRUE 43712
43710: GO 43734
43712: POP
// temp_list_2 = [ difficulty , difficulty ] ; 3 :
43713: LD_ADDR_VAR 0 3
43717: PUSH
43718: LD_OWVAR 67
43722: PUSH
43723: LD_OWVAR 67
43727: PUSH
43728: EMPTY
43729: LIST
43730: LIST
43731: ST_TO_ADDR
43732: GO 43777
43734: LD_INT 3
43736: DOUBLE
43737: EQUAL
43738: IFTRUE 43742
43740: GO 43776
43742: POP
// temp_list_2 = [ difficulty + Rand ( 0 , 1 ) , difficulty ] ; end ;
43743: LD_ADDR_VAR 0 3
43747: PUSH
43748: LD_OWVAR 67
43752: PUSH
43753: LD_INT 0
43755: PPUSH
43756: LD_INT 1
43758: PPUSH
43759: CALL_OW 12
43763: PLUS
43764: PUSH
43765: LD_OWVAR 67
43769: PUSH
43770: EMPTY
43771: LIST
43772: LIST
43773: ST_TO_ADDR
43774: GO 43777
43776: POP
// end ; end ;
43777: GO 43780
43779: POP
// temp_list = CreateUnitsWithClass ( temp_list_2 [ 1 ] , class_soldier , false ,  , side ) ;
43780: LD_ADDR_VAR 0 2
43784: PUSH
43785: LD_VAR 0 3
43789: PUSH
43790: LD_INT 1
43792: ARRAY
43793: PPUSH
43794: LD_INT 1
43796: PPUSH
43797: LD_INT 0
43799: PPUSH
43800: LD_STRING 
43802: PPUSH
43803: LD_VAR 0 16
43807: PPUSH
43808: CALL 7656 0 5
43812: ST_TO_ADDR
// temp_list = temp_list ^ CreateUnitsWithClass ( temp_list_2 [ 2 ] , class_bazooker , false ,  , side ) ;
43813: LD_ADDR_VAR 0 2
43817: PUSH
43818: LD_VAR 0 2
43822: PUSH
43823: LD_VAR 0 3
43827: PUSH
43828: LD_INT 2
43830: ARRAY
43831: PPUSH
43832: LD_INT 9
43834: PPUSH
43835: LD_INT 0
43837: PPUSH
43838: LD_STRING 
43840: PPUSH
43841: LD_VAR 0 16
43845: PPUSH
43846: CALL 7656 0 5
43850: ADD
43851: ST_TO_ADDR
// soldiers = Replace ( soldiers , strat , temp_list ) ;
43852: LD_ADDR_VAR 0 14
43856: PUSH
43857: LD_VAR 0 14
43861: PPUSH
43862: LD_VAR 0 7
43866: PPUSH
43867: LD_VAR 0 2
43871: PPUSH
43872: CALL_OW 1
43876: ST_TO_ADDR
// for i in soldiers [ strat ] do
43877: LD_ADDR_VAR 0 1
43881: PUSH
43882: LD_VAR 0 14
43886: PUSH
43887: LD_VAR 0 7
43891: ARRAY
43892: PUSH
43893: FOR_IN
43894: IFFALSE 43912
// SetDir ( i , temp_value ) ;
43896: LD_VAR 0 1
43900: PPUSH
43901: LD_VAR 0 9
43905: PPUSH
43906: CALL_OW 233
43910: GO 43893
43912: POP
43913: POP
// case russians_attack of 1 :
43914: LD_EXP 84
43918: PUSH
43919: LD_INT 1
43921: DOUBLE
43922: EQUAL
43923: IFTRUE 43927
43925: GO 43997
43927: POP
// begin case strat of 1 :
43928: LD_VAR 0 7
43932: PUSH
43933: LD_INT 1
43935: DOUBLE
43936: EQUAL
43937: IFTRUE 43941
43939: GO 43969
43941: POP
// val = [ 0 , 1 , 2 ] [ difficulty ] ; 2 , 3 :
43942: LD_ADDR_VAR 0 4
43946: PUSH
43947: LD_INT 0
43949: PUSH
43950: LD_INT 1
43952: PUSH
43953: LD_INT 2
43955: PUSH
43956: EMPTY
43957: LIST
43958: LIST
43959: LIST
43960: PUSH
43961: LD_OWVAR 67
43965: ARRAY
43966: ST_TO_ADDR
43967: GO 43995
43969: LD_INT 2
43971: DOUBLE
43972: EQUAL
43973: IFTRUE 43983
43975: LD_INT 3
43977: DOUBLE
43978: EQUAL
43979: IFTRUE 43983
43981: GO 43994
43983: POP
// val = 0 ; end ;
43984: LD_ADDR_VAR 0 4
43988: PUSH
43989: LD_INT 0
43991: ST_TO_ADDR
43992: GO 43995
43994: POP
// end ; 3 :
43995: GO 44156
43997: LD_INT 3
43999: DOUBLE
44000: EQUAL
44001: IFTRUE 44005
44003: GO 44155
44005: POP
// begin case strat of 1 :
44006: LD_VAR 0 7
44010: PUSH
44011: LD_INT 1
44013: DOUBLE
44014: EQUAL
44015: IFTRUE 44019
44017: GO 44047
44019: POP
// val = [ 2 , 3 , 4 ] [ difficulty ] ; 2 , 3 :
44020: LD_ADDR_VAR 0 4
44024: PUSH
44025: LD_INT 2
44027: PUSH
44028: LD_INT 3
44030: PUSH
44031: LD_INT 4
44033: PUSH
44034: EMPTY
44035: LIST
44036: LIST
44037: LIST
44038: PUSH
44039: LD_OWVAR 67
44043: ARRAY
44044: ST_TO_ADDR
44045: GO 44153
44047: LD_INT 2
44049: DOUBLE
44050: EQUAL
44051: IFTRUE 44061
44053: LD_INT 3
44055: DOUBLE
44056: EQUAL
44057: IFTRUE 44061
44059: GO 44152
44061: POP
// begin if split > 0 then
44062: LD_VAR 0 12
44066: PUSH
44067: LD_INT 0
44069: GREATER
44070: IFFALSE 44142
// begin if strat = 3 or Rand ( 1 , 2 ) = 1 or split > 1 then
44072: LD_VAR 0 7
44076: PUSH
44077: LD_INT 3
44079: EQUAL
44080: PUSH
44081: LD_INT 1
44083: PPUSH
44084: LD_INT 2
44086: PPUSH
44087: CALL_OW 12
44091: PUSH
44092: LD_INT 1
44094: EQUAL
44095: OR
44096: PUSH
44097: LD_VAR 0 12
44101: PUSH
44102: LD_INT 1
44104: GREATER
44105: OR
44106: IFFALSE 44132
// begin val = 1 ;
44108: LD_ADDR_VAR 0 4
44112: PUSH
44113: LD_INT 1
44115: ST_TO_ADDR
// split = split - 1 ;
44116: LD_ADDR_VAR 0 12
44120: PUSH
44121: LD_VAR 0 12
44125: PUSH
44126: LD_INT 1
44128: MINUS
44129: ST_TO_ADDR
// end else
44130: GO 44140
// val = 0 ;
44132: LD_ADDR_VAR 0 4
44136: PUSH
44137: LD_INT 0
44139: ST_TO_ADDR
// end else
44140: GO 44150
// val = 0 ;
44142: LD_ADDR_VAR 0 4
44146: PUSH
44147: LD_INT 0
44149: ST_TO_ADDR
// end ; end ;
44150: GO 44153
44152: POP
// end ; end ;
44153: GO 44156
44155: POP
// temp_list = [ ] ;
44156: LD_ADDR_VAR 0 2
44160: PUSH
44161: EMPTY
44162: ST_TO_ADDR
// temp_list_2 = [ ] ;
44163: LD_ADDR_VAR 0 3
44167: PUSH
44168: EMPTY
44169: ST_TO_ADDR
// for i = 1 to val do
44170: LD_ADDR_VAR 0 1
44174: PUSH
44175: DOUBLE
44176: LD_INT 1
44178: DEC
44179: ST_TO_ADDR
44180: LD_VAR 0 4
44184: PUSH
44185: FOR_TO
44186: IFFALSE 44299
// begin InitiateRussianVehicleVariables ;
44188: CALL 7999 0 0
// uc_side = side ;
44192: LD_ADDR_OWVAR 20
44196: PUSH
44197: LD_VAR 0 16
44201: ST_TO_ADDR
// vc_engine = engine_siberite ;
44202: LD_ADDR_OWVAR 39
44206: PUSH
44207: LD_INT 3
44209: ST_TO_ADDR
// un1 = CreateVehicle ;
44210: LD_ADDR_VAR 0 5
44214: PUSH
44215: CALL_OW 45
44219: ST_TO_ADDR
// temp_list = temp_list ^ un1 ;
44220: LD_ADDR_VAR 0 2
44224: PUSH
44225: LD_VAR 0 2
44229: PUSH
44230: LD_VAR 0 5
44234: ADD
44235: ST_TO_ADDR
// un2 = CreateUnitsWithClass ( 1 , class_mechanic , false ,  , side ) [ 1 ] ;
44236: LD_ADDR_VAR 0 6
44240: PUSH
44241: LD_INT 1
44243: PPUSH
44244: LD_INT 3
44246: PPUSH
44247: LD_INT 0
44249: PPUSH
44250: LD_STRING 
44252: PPUSH
44253: LD_VAR 0 16
44257: PPUSH
44258: CALL 7656 0 5
44262: PUSH
44263: LD_INT 1
44265: ARRAY
44266: ST_TO_ADDR
// PlaceHumanInUnit ( un2 , un1 ) ;
44267: LD_VAR 0 6
44271: PPUSH
44272: LD_VAR 0 5
44276: PPUSH
44277: CALL_OW 52
// temp_list_2 = temp_list_2 ^ un2 ;
44281: LD_ADDR_VAR 0 3
44285: PUSH
44286: LD_VAR 0 3
44290: PUSH
44291: LD_VAR 0 6
44295: ADD
44296: ST_TO_ADDR
// end ;
44297: GO 44185
44299: POP
44300: POP
// vehicles = Replace ( vehicles , strat , temp_list ) ;
44301: LD_ADDR_VAR 0 13
44305: PUSH
44306: LD_VAR 0 13
44310: PPUSH
44311: LD_VAR 0 7
44315: PPUSH
44316: LD_VAR 0 2
44320: PPUSH
44321: CALL_OW 1
44325: ST_TO_ADDR
// mechanics = Replace ( mechanics , strat , temp_list_2 ) ;
44326: LD_ADDR_VAR 0 15
44330: PUSH
44331: LD_VAR 0 15
44335: PPUSH
44336: LD_VAR 0 7
44340: PPUSH
44341: LD_VAR 0 3
44345: PPUSH
44346: CALL_OW 1
44350: ST_TO_ADDR
// for i in vehicles [ strat ] do
44351: LD_ADDR_VAR 0 1
44355: PUSH
44356: LD_VAR 0 13
44360: PUSH
44361: LD_VAR 0 7
44365: ARRAY
44366: PUSH
44367: FOR_IN
44368: IFFALSE 44386
// SetDir ( i , temp_value ) ;
44370: LD_VAR 0 1
44374: PPUSH
44375: LD_VAR 0 9
44379: PPUSH
44380: CALL_OW 233
44384: GO 44367
44386: POP
44387: POP
// for i in soldiers [ strat ] ^ vehicles [ strat ] do
44388: LD_ADDR_VAR 0 1
44392: PUSH
44393: LD_VAR 0 14
44397: PUSH
44398: LD_VAR 0 7
44402: ARRAY
44403: PUSH
44404: LD_VAR 0 13
44408: PUSH
44409: LD_VAR 0 7
44413: ARRAY
44414: ADD
44415: PUSH
44416: FOR_IN
44417: IFFALSE 44456
// unit_hex_index = Replace ( unit_hex_index , i , hex_index_gather [ strat ] + 1 ) ;
44419: LD_ADDR_VAR 0 22
44423: PUSH
44424: LD_VAR 0 22
44428: PPUSH
44429: LD_VAR 0 1
44433: PPUSH
44434: LD_VAR 0 19
44438: PUSH
44439: LD_VAR 0 7
44443: ARRAY
44444: PUSH
44445: LD_INT 1
44447: PLUS
44448: PPUSH
44449: CALL_OW 1
44453: ST_TO_ADDR
44454: GO 44416
44456: POP
44457: POP
// end ;
44458: GO 43462
44460: POP
44461: POP
// all_are_placed = [ false , false , false ] ;
44462: LD_ADDR_VAR 0 20
44466: PUSH
44467: LD_INT 0
44469: PUSH
44470: LD_INT 0
44472: PUSH
44473: LD_INT 0
44475: PUSH
44476: EMPTY
44477: LIST
44478: LIST
44479: LIST
44480: ST_TO_ADDR
// ready_to_attack = [ false , false , false ] ;
44481: LD_ADDR_VAR 0 21
44485: PUSH
44486: LD_INT 0
44488: PUSH
44489: LD_INT 0
44491: PUSH
44492: LD_INT 0
44494: PUSH
44495: EMPTY
44496: LIST
44497: LIST
44498: LIST
44499: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
44500: LD_INT 35
44502: PPUSH
44503: CALL_OW 67
// if ( all_are_placed diff true ) = 0 then
44507: LD_VAR 0 20
44511: PUSH
44512: LD_INT 1
44514: DIFF
44515: PUSH
44516: LD_INT 0
44518: EQUAL
44519: IFFALSE 44652
// begin if russians_attack = 3 then
44521: LD_EXP 84
44525: PUSH
44526: LD_INT 3
44528: EQUAL
44529: IFFALSE 44543
// temp_list = russian_prisoners else
44531: LD_ADDR_VAR 0 2
44535: PUSH
44536: LD_EXP 80
44540: ST_TO_ADDR
44541: GO 44550
// temp_list = [ ] ;
44543: LD_ADDR_VAR 0 2
44547: PUSH
44548: EMPTY
44549: ST_TO_ADDR
// for strat = 1 to 3 do
44550: LD_ADDR_VAR 0 7
44554: PUSH
44555: DOUBLE
44556: LD_INT 1
44558: DEC
44559: ST_TO_ADDR
44560: LD_INT 3
44562: PUSH
44563: FOR_TO
44564: IFFALSE 44612
// begin temp_list = temp_list ^ soldiers [ strat ] ;
44566: LD_ADDR_VAR 0 2
44570: PUSH
44571: LD_VAR 0 2
44575: PUSH
44576: LD_VAR 0 14
44580: PUSH
44581: LD_VAR 0 7
44585: ARRAY
44586: ADD
44587: ST_TO_ADDR
// temp_list = temp_list ^ mechanics [ strat ] ;
44588: LD_ADDR_VAR 0 2
44592: PUSH
44593: LD_VAR 0 2
44597: PUSH
44598: LD_VAR 0 15
44602: PUSH
44603: LD_VAR 0 7
44607: ARRAY
44608: ADD
44609: ST_TO_ADDR
// end ;
44610: GO 44563
44612: POP
44613: POP
// if UnitFilter ( temp_list , [ f_ok ] ) = 0 then
44614: LD_VAR 0 2
44618: PPUSH
44619: LD_INT 50
44621: PUSH
44622: EMPTY
44623: LIST
44624: PPUSH
44625: CALL_OW 72
44629: PUSH
44630: LD_INT 0
44632: EQUAL
44633: IFFALSE 44652
// begin russians_attack = russians_attack + 1 ;
44635: LD_ADDR_EXP 84
44639: PUSH
44640: LD_EXP 84
44644: PUSH
44645: LD_INT 1
44647: PLUS
44648: ST_TO_ADDR
// enable ;
44649: ENABLE
// exit ;
44650: GO 46984
// end ; end ; if russians_attack = 3 and russian_prisoners_decision = 2 then
44652: LD_EXP 84
44656: PUSH
44657: LD_INT 3
44659: EQUAL
44660: PUSH
44661: LD_EXP 81
44665: PUSH
44666: LD_INT 2
44668: EQUAL
44669: AND
44670: IFFALSE 44718
// if ( ready_to_attack diff true ) = 0 and ContactTime ( [ you , side ] ) <= 0 0$5 then
44672: LD_VAR 0 21
44676: PUSH
44677: LD_INT 1
44679: DIFF
44680: PUSH
44681: LD_INT 0
44683: EQUAL
44684: PUSH
44685: LD_EXP 2
44689: PUSH
44690: LD_VAR 0 16
44694: PUSH
44695: EMPTY
44696: LIST
44697: LIST
44698: PPUSH
44699: CALL_OW 462
44703: PUSH
44704: LD_INT 175
44706: LESSEQUAL
44707: AND
44708: IFFALSE 44718
// russian_prisoners_decision = 1 ;
44710: LD_ADDR_EXP 81
44714: PUSH
44715: LD_INT 1
44717: ST_TO_ADDR
// for strat = 1 to 3 do
44718: LD_ADDR_VAR 0 7
44722: PUSH
44723: DOUBLE
44724: LD_INT 1
44726: DEC
44727: ST_TO_ADDR
44728: LD_INT 3
44730: PUSH
44731: FOR_TO
44732: IFFALSE 46978
// begin if not all_are_placed [ strat ] then
44734: LD_VAR 0 20
44738: PUSH
44739: LD_VAR 0 7
44743: ARRAY
44744: NOT
44745: IFFALSE 44925
// begin temp_list = UnitFilter ( vehicles [ strat ] ^ soldiers [ strat ] , [ f_not , [ f_placed ] ] ) ;
44747: LD_ADDR_VAR 0 2
44751: PUSH
44752: LD_VAR 0 13
44756: PUSH
44757: LD_VAR 0 7
44761: ARRAY
44762: PUSH
44763: LD_VAR 0 14
44767: PUSH
44768: LD_VAR 0 7
44772: ARRAY
44773: ADD
44774: PPUSH
44775: LD_INT 3
44777: PUSH
44778: LD_INT 52
44780: PUSH
44781: EMPTY
44782: LIST
44783: PUSH
44784: EMPTY
44785: LIST
44786: LIST
44787: PPUSH
44788: CALL_OW 72
44792: ST_TO_ADDR
// if temp_list = 0 then
44793: LD_VAR 0 2
44797: PUSH
44798: LD_INT 0
44800: EQUAL
44801: IFFALSE 44828
// all_are_placed = Replace ( all_are_placed , strat , true ) else
44803: LD_ADDR_VAR 0 20
44807: PUSH
44808: LD_VAR 0 20
44812: PPUSH
44813: LD_VAR 0 7
44817: PPUSH
44818: LD_INT 1
44820: PPUSH
44821: CALL_OW 1
44825: ST_TO_ADDR
44826: GO 44925
// begin case strat of 1 :
44828: LD_VAR 0 7
44832: PUSH
44833: LD_INT 1
44835: DOUBLE
44836: EQUAL
44837: IFTRUE 44841
44839: GO 44852
44841: POP
// val = gensher_reinforcements_area ; 2 :
44842: LD_ADDR_VAR 0 4
44846: PUSH
44847: LD_INT 6
44849: ST_TO_ADDR
44850: GO 44891
44852: LD_INT 2
44854: DOUBLE
44855: EQUAL
44856: IFTRUE 44860
44858: GO 44871
44860: POP
// val = attack_spawn_2 ; 3 :
44861: LD_ADDR_VAR 0 4
44865: PUSH
44866: LD_INT 10
44868: ST_TO_ADDR
44869: GO 44891
44871: LD_INT 3
44873: DOUBLE
44874: EQUAL
44875: IFTRUE 44879
44877: GO 44890
44879: POP
// val = attack_spawn_3 ; end ;
44880: LD_ADDR_VAR 0 4
44884: PUSH
44885: LD_INT 11
44887: ST_TO_ADDR
44888: GO 44891
44890: POP
// for i in temp_list do
44891: LD_ADDR_VAR 0 1
44895: PUSH
44896: LD_VAR 0 2
44900: PUSH
44901: FOR_IN
44902: IFFALSE 44923
// PlaceUnitArea ( i , val , false ) ;
44904: LD_VAR 0 1
44908: PPUSH
44909: LD_VAR 0 4
44913: PPUSH
44914: LD_INT 0
44916: PPUSH
44917: CALL_OW 49
44921: GO 44901
44923: POP
44924: POP
// end ; end ; if ( all_are_placed diff true ) = 0 then
44925: LD_VAR 0 20
44929: PUSH
44930: LD_INT 1
44932: DIFF
44933: PUSH
44934: LD_INT 0
44936: EQUAL
44937: IFFALSE 45095
// begin temp_list = UnitFilter ( vehicles [ strat ] , [ f_alive ] ) ;
44939: LD_ADDR_VAR 0 2
44943: PUSH
44944: LD_VAR 0 13
44948: PUSH
44949: LD_VAR 0 7
44953: ARRAY
44954: PPUSH
44955: LD_INT 51
44957: PUSH
44958: EMPTY
44959: LIST
44960: PPUSH
44961: CALL_OW 72
44965: ST_TO_ADDR
// vehicles = Replace ( vehicles , strat , temp_list ) ;
44966: LD_ADDR_VAR 0 13
44970: PUSH
44971: LD_VAR 0 13
44975: PPUSH
44976: LD_VAR 0 7
44980: PPUSH
44981: LD_VAR 0 2
44985: PPUSH
44986: CALL_OW 1
44990: ST_TO_ADDR
// temp_list = UnitFilter ( soldiers [ strat ] , [ f_alive ] ) ;
44991: LD_ADDR_VAR 0 2
44995: PUSH
44996: LD_VAR 0 14
45000: PUSH
45001: LD_VAR 0 7
45005: ARRAY
45006: PPUSH
45007: LD_INT 51
45009: PUSH
45010: EMPTY
45011: LIST
45012: PPUSH
45013: CALL_OW 72
45017: ST_TO_ADDR
// soldiers = Replace ( soldiers , strat , temp_list ) ;
45018: LD_ADDR_VAR 0 14
45022: PUSH
45023: LD_VAR 0 14
45027: PPUSH
45028: LD_VAR 0 7
45032: PPUSH
45033: LD_VAR 0 2
45037: PPUSH
45038: CALL_OW 1
45042: ST_TO_ADDR
// temp_list = UnitFilter ( mechanics [ strat ] , [ f_alive ] ) ;
45043: LD_ADDR_VAR 0 2
45047: PUSH
45048: LD_VAR 0 15
45052: PUSH
45053: LD_VAR 0 7
45057: ARRAY
45058: PPUSH
45059: LD_INT 51
45061: PUSH
45062: EMPTY
45063: LIST
45064: PPUSH
45065: CALL_OW 72
45069: ST_TO_ADDR
// mechanics = Replace ( mechanics , strat , temp_list ) ;
45070: LD_ADDR_VAR 0 15
45074: PUSH
45075: LD_VAR 0 15
45079: PPUSH
45080: LD_VAR 0 7
45084: PPUSH
45085: LD_VAR 0 2
45089: PPUSH
45090: CALL_OW 1
45094: ST_TO_ADDR
// end ; for i in mechanics [ strat ] do
45095: LD_ADDR_VAR 0 1
45099: PUSH
45100: LD_VAR 0 15
45104: PUSH
45105: LD_VAR 0 7
45109: ARRAY
45110: PUSH
45111: FOR_IN
45112: IFFALSE 45326
// begin val = IsInUnit ( i ) ;
45114: LD_ADDR_VAR 0 4
45118: PUSH
45119: LD_VAR 0 1
45123: PPUSH
45124: CALL_OW 310
45128: ST_TO_ADDR
// if val > 0 then
45129: LD_VAR 0 4
45133: PUSH
45134: LD_INT 0
45136: GREATER
45137: IFFALSE 45324
// if GetType ( val ) = unit_vehicle then
45139: LD_VAR 0 4
45143: PPUSH
45144: CALL_OW 247
45148: PUSH
45149: LD_INT 2
45151: EQUAL
45152: IFFALSE 45324
// if not val in vehicles [ strat ] then
45154: LD_VAR 0 4
45158: PUSH
45159: LD_VAR 0 13
45163: PUSH
45164: LD_VAR 0 7
45168: ARRAY
45169: IN
45170: NOT
45171: IFFALSE 45324
// begin for un1 = 1 to vehicles + 0 do
45173: LD_ADDR_VAR 0 5
45177: PUSH
45178: DOUBLE
45179: LD_INT 1
45181: DEC
45182: ST_TO_ADDR
45183: LD_VAR 0 13
45187: PUSH
45188: LD_INT 0
45190: PLUS
45191: PUSH
45192: FOR_TO
45193: IFFALSE 45244
// begin temp_list = vehicles [ un1 ] diff val ;
45195: LD_ADDR_VAR 0 2
45199: PUSH
45200: LD_VAR 0 13
45204: PUSH
45205: LD_VAR 0 5
45209: ARRAY
45210: PUSH
45211: LD_VAR 0 4
45215: DIFF
45216: ST_TO_ADDR
// vehicles = Replace ( vehicles , un1 , temp_list ) ;
45217: LD_ADDR_VAR 0 13
45221: PUSH
45222: LD_VAR 0 13
45226: PPUSH
45227: LD_VAR 0 5
45231: PPUSH
45232: LD_VAR 0 2
45236: PPUSH
45237: CALL_OW 1
45241: ST_TO_ADDR
// end ;
45242: GO 45192
45244: POP
45245: POP
// temp_list = vehicles [ strat ] ^ val ;
45246: LD_ADDR_VAR 0 2
45250: PUSH
45251: LD_VAR 0 13
45255: PUSH
45256: LD_VAR 0 7
45260: ARRAY
45261: PUSH
45262: LD_VAR 0 4
45266: ADD
45267: ST_TO_ADDR
// vehicles = Replace ( vehicles , strat , temp_list ) ;
45268: LD_ADDR_VAR 0 13
45272: PUSH
45273: LD_VAR 0 13
45277: PPUSH
45278: LD_VAR 0 7
45282: PPUSH
45283: LD_VAR 0 2
45287: PPUSH
45288: CALL_OW 1
45292: ST_TO_ADDR
// unit_hex_index = Replace ( unit_hex_index , val , unit_hex_index [ i ] ) ;
45293: LD_ADDR_VAR 0 22
45297: PUSH
45298: LD_VAR 0 22
45302: PPUSH
45303: LD_VAR 0 4
45307: PPUSH
45308: LD_VAR 0 22
45312: PUSH
45313: LD_VAR 0 1
45317: ARRAY
45318: PPUSH
45319: CALL_OW 1
45323: ST_TO_ADDR
// end ; end ;
45324: GO 45111
45326: POP
45327: POP
// mechanics_as_soldiers = [ ] ;
45328: LD_ADDR_VAR 0 8
45332: PUSH
45333: EMPTY
45334: ST_TO_ADDR
// for i in mechanics [ strat ] do
45335: LD_ADDR_VAR 0 1
45339: PUSH
45340: LD_VAR 0 15
45344: PUSH
45345: LD_VAR 0 7
45349: ARRAY
45350: PUSH
45351: FOR_IN
45352: IFFALSE 45521
// begin if IsInUnit ( i ) = 0 then
45354: LD_VAR 0 1
45358: PPUSH
45359: CALL_OW 310
45363: PUSH
45364: LD_INT 0
45366: EQUAL
45367: IFFALSE 45519
// begin temp_list = EmptyWarVehicles ( i , 10 , true ) ;
45369: LD_ADDR_VAR 0 2
45373: PUSH
45374: LD_VAR 0 1
45378: PPUSH
45379: LD_INT 10
45381: PPUSH
45382: LD_INT 1
45384: PPUSH
45385: CALL 39817 0 3
45389: ST_TO_ADDR
// if temp_list > 0 then
45390: LD_VAR 0 2
45394: PUSH
45395: LD_INT 0
45397: GREATER
45398: IFFALSE 45436
// begin un1 = NearestUnitToUnit ( temp_list , i ) ;
45400: LD_ADDR_VAR 0 5
45404: PUSH
45405: LD_VAR 0 2
45409: PPUSH
45410: LD_VAR 0 1
45414: PPUSH
45415: CALL_OW 74
45419: ST_TO_ADDR
// ComEnterUnit ( i , un1 ) ;
45420: LD_VAR 0 1
45424: PPUSH
45425: LD_VAR 0 5
45429: PPUSH
45430: CALL_OW 120
// end else
45434: GO 45519
// begin temp_list = EmptyWarVehicles ( i , 10 , false ) ;
45436: LD_ADDR_VAR 0 2
45440: PUSH
45441: LD_VAR 0 1
45445: PPUSH
45446: LD_INT 10
45448: PPUSH
45449: LD_INT 0
45451: PPUSH
45452: CALL 39817 0 3
45456: ST_TO_ADDR
// if temp_list > 0 then
45457: LD_VAR 0 2
45461: PUSH
45462: LD_INT 0
45464: GREATER
45465: IFFALSE 45503
// begin un1 = NearestUnitToUnit ( temp_list , i ) ;
45467: LD_ADDR_VAR 0 5
45471: PUSH
45472: LD_VAR 0 2
45476: PPUSH
45477: LD_VAR 0 1
45481: PPUSH
45482: CALL_OW 74
45486: ST_TO_ADDR
// ComRepairVehicle ( i , un1 ) ;
45487: LD_VAR 0 1
45491: PPUSH
45492: LD_VAR 0 5
45496: PPUSH
45497: CALL_OW 129
// end else
45501: GO 45519
// mechanics_as_soldiers = mechanics_as_soldiers ^ i ;
45503: LD_ADDR_VAR 0 8
45507: PUSH
45508: LD_VAR 0 8
45512: PUSH
45513: LD_VAR 0 1
45517: ADD
45518: ST_TO_ADDR
// end ; end ; end ;
45519: GO 45351
45521: POP
45522: POP
// group_ready = true ;
45523: LD_ADDR_VAR 0 11
45527: PUSH
45528: LD_INT 1
45530: ST_TO_ADDR
// for i in vehicles [ strat ] ^ soldiers [ strat ] ^ mechanics_as_soldiers do
45531: LD_ADDR_VAR 0 1
45535: PUSH
45536: LD_VAR 0 13
45540: PUSH
45541: LD_VAR 0 7
45545: ARRAY
45546: PUSH
45547: LD_VAR 0 14
45551: PUSH
45552: LD_VAR 0 7
45556: ARRAY
45557: ADD
45558: PUSH
45559: LD_VAR 0 8
45563: ADD
45564: PUSH
45565: FOR_IN
45566: IFFALSE 46750
// begin if GetClass ( i ) = class_bazooker then
45568: LD_VAR 0 1
45572: PPUSH
45573: CALL_OW 257
45577: PUSH
45578: LD_INT 9
45580: EQUAL
45581: IFFALSE 45902
// begin temp_list = GetTaskList ( i ) ;
45583: LD_ADDR_VAR 0 2
45587: PUSH
45588: LD_VAR 0 1
45592: PPUSH
45593: CALL_OW 437
45597: ST_TO_ADDR
// if temp_list > 0 then
45598: LD_VAR 0 2
45602: PUSH
45603: LD_INT 0
45605: GREATER
45606: IFFALSE 45628
// if temp_list [ 1 ] [ 1 ] = & then
45608: LD_VAR 0 2
45612: PUSH
45613: LD_INT 1
45615: ARRAY
45616: PUSH
45617: LD_INT 1
45619: ARRAY
45620: PUSH
45621: LD_STRING &
45623: EQUAL
45624: IFFALSE 45628
// continue ;
45626: GO 45565
// un1 = Attacks ( i ) ;
45628: LD_ADDR_VAR 0 5
45632: PUSH
45633: LD_VAR 0 1
45637: PPUSH
45638: CALL_OW 320
45642: ST_TO_ADDR
// if un1 > 0 and ( FindDangerousNonhumanUnits ( [ un1 ] ) > 0 or GetType ( un1 ) = unit_human ) then
45643: LD_VAR 0 5
45647: PUSH
45648: LD_INT 0
45650: GREATER
45651: PUSH
45652: LD_VAR 0 5
45656: PUSH
45657: EMPTY
45658: LIST
45659: PPUSH
45660: CALL 47104 0 1
45664: PUSH
45665: LD_INT 0
45667: GREATER
45668: PUSH
45669: LD_VAR 0 5
45673: PPUSH
45674: CALL_OW 247
45678: PUSH
45679: LD_INT 1
45681: EQUAL
45682: OR
45683: AND
45684: IFFALSE 45902
// begin temp_list_2 = [ GetX ( un1 ) , GetY ( un1 ) ] ;
45686: LD_ADDR_VAR 0 3
45690: PUSH
45691: LD_VAR 0 5
45695: PPUSH
45696: CALL_OW 250
45700: PUSH
45701: LD_VAR 0 5
45705: PPUSH
45706: CALL_OW 251
45710: PUSH
45711: EMPTY
45712: LIST
45713: LIST
45714: ST_TO_ADDR
// temp_value = false ;
45715: LD_ADDR_VAR 0 9
45719: PUSH
45720: LD_INT 0
45722: ST_TO_ADDR
// for val in time_shift_hexes ^ time_shift_bazookers do
45723: LD_ADDR_VAR 0 4
45727: PUSH
45728: LD_EXP 96
45732: PUSH
45733: LD_EXP 98
45737: ADD
45738: PUSH
45739: FOR_IN
45740: IFFALSE 45812
// if GetDistXY ( temp_list_2 [ 1 ] , temp_list_2 [ 2 ] , val [ 1 ] , val [ 2 ] ) <= time_shift_data [ side ] [ 2 ] then
45742: LD_VAR 0 3
45746: PUSH
45747: LD_INT 1
45749: ARRAY
45750: PPUSH
45751: LD_VAR 0 3
45755: PUSH
45756: LD_INT 2
45758: ARRAY
45759: PPUSH
45760: LD_VAR 0 4
45764: PUSH
45765: LD_INT 1
45767: ARRAY
45768: PPUSH
45769: LD_VAR 0 4
45773: PUSH
45774: LD_INT 2
45776: ARRAY
45777: PPUSH
45778: CALL_OW 298
45782: PUSH
45783: LD_EXP 97
45787: PUSH
45788: LD_VAR 0 16
45792: ARRAY
45793: PUSH
45794: LD_INT 2
45796: ARRAY
45797: LESSEQUAL
45798: IFFALSE 45810
// begin temp_value = true ;
45800: LD_ADDR_VAR 0 9
45804: PUSH
45805: LD_INT 1
45807: ST_TO_ADDR
// break ;
45808: GO 45812
// end ;
45810: GO 45739
45812: POP
45813: POP
// if not temp_value then
45814: LD_VAR 0 9
45818: NOT
45819: IFFALSE 45902
// begin ComTimeShift ( i , temp_list_2 [ 1 ] , temp_list_2 [ 2 ] ) ;
45821: LD_VAR 0 1
45825: PPUSH
45826: LD_VAR 0 3
45830: PUSH
45831: LD_INT 1
45833: ARRAY
45834: PPUSH
45835: LD_VAR 0 3
45839: PUSH
45840: LD_INT 2
45842: ARRAY
45843: PPUSH
45844: CALL_OW 154
// time_shift_bazookers = Insert ( time_shift_bazookers , 1 , [ temp_list_2 [ 1 ] , temp_list_2 [ 2 ] , i , tick ] ) ;
45848: LD_ADDR_EXP 98
45852: PUSH
45853: LD_EXP 98
45857: PPUSH
45858: LD_INT 1
45860: PPUSH
45861: LD_VAR 0 3
45865: PUSH
45866: LD_INT 1
45868: ARRAY
45869: PUSH
45870: LD_VAR 0 3
45874: PUSH
45875: LD_INT 2
45877: ARRAY
45878: PUSH
45879: LD_VAR 0 1
45883: PUSH
45884: LD_OWVAR 1
45888: PUSH
45889: EMPTY
45890: LIST
45891: LIST
45892: LIST
45893: LIST
45894: PPUSH
45895: CALL_OW 2
45899: ST_TO_ADDR
// continue ;
45900: GO 45565
// end ; end ; end ; if ( ready_to_attack diff true ) > 0 then
45902: LD_VAR 0 21
45906: PUSH
45907: LD_INT 1
45909: DIFF
45910: PUSH
45911: LD_INT 0
45913: GREATER
45914: IFFALSE 45926
// temp_value = false else
45916: LD_ADDR_VAR 0 9
45920: PUSH
45921: LD_INT 0
45923: ST_TO_ADDR
45924: GO 45934
// temp_value = true ;
45926: LD_ADDR_VAR 0 9
45930: PUSH
45931: LD_INT 1
45933: ST_TO_ADDR
// begin temp_list = FilterAllUnits ( [ [ f_enemy , side ] , [ f_type , unit_human ] , [ f_dist , i , 14 ] , [ f_see , side ] ] ) ;
45934: LD_ADDR_VAR 0 2
45938: PUSH
45939: LD_INT 81
45941: PUSH
45942: LD_VAR 0 16
45946: PUSH
45947: EMPTY
45948: LIST
45949: LIST
45950: PUSH
45951: LD_INT 21
45953: PUSH
45954: LD_INT 1
45956: PUSH
45957: EMPTY
45958: LIST
45959: LIST
45960: PUSH
45961: LD_INT 91
45963: PUSH
45964: LD_VAR 0 1
45968: PUSH
45969: LD_INT 14
45971: PUSH
45972: EMPTY
45973: LIST
45974: LIST
45975: LIST
45976: PUSH
45977: LD_INT 101
45979: PUSH
45980: LD_VAR 0 16
45984: PUSH
45985: EMPTY
45986: LIST
45987: LIST
45988: PUSH
45989: EMPTY
45990: LIST
45991: LIST
45992: LIST
45993: LIST
45994: PPUSH
45995: CALL_OW 69
45999: ST_TO_ADDR
// if temp_list > 0 then
46000: LD_VAR 0 2
46004: PUSH
46005: LD_INT 0
46007: GREATER
46008: IFFALSE 46160
// begin temp_value = true ;
46010: LD_ADDR_VAR 0 9
46014: PUSH
46015: LD_INT 1
46017: ST_TO_ADDR
// group_ready = false ;
46018: LD_ADDR_VAR 0 11
46022: PUSH
46023: LD_INT 0
46025: ST_TO_ADDR
// temp_list_2 = UnitFilter ( temp_list , [ f_not , [ f_lives , 250 ] ] ) ;
46026: LD_ADDR_VAR 0 3
46030: PUSH
46031: LD_VAR 0 2
46035: PPUSH
46036: LD_INT 3
46038: PUSH
46039: LD_INT 24
46041: PUSH
46042: LD_INT 250
46044: PUSH
46045: EMPTY
46046: LIST
46047: LIST
46048: PUSH
46049: EMPTY
46050: LIST
46051: LIST
46052: PPUSH
46053: CALL_OW 72
46057: ST_TO_ADDR
// if temp_list_2 > 0 then
46058: LD_VAR 0 3
46062: PUSH
46063: LD_INT 0
46065: GREATER
46066: IFFALSE 46078
// temp_list = temp_list_2 ;
46068: LD_ADDR_VAR 0 2
46072: PUSH
46073: LD_VAR 0 3
46077: ST_TO_ADDR
// temp_unit = AllNearestUnitToUnit ( temp_list , i ) ;
46078: LD_ADDR_VAR 0 10
46082: PUSH
46083: LD_VAR 0 2
46087: PPUSH
46088: LD_VAR 0 1
46092: PPUSH
46093: CALL_OW 75
46097: ST_TO_ADDR
// if GetLives ( temp_unit ) > 250 then
46098: LD_VAR 0 10
46102: PPUSH
46103: CALL_OW 256
46107: PUSH
46108: LD_INT 250
46110: GREATER
46111: IFFALSE 46144
// ComAgressiveMove ( i , GetX ( temp_unit ) , GetY ( temp_unit ) ) else
46113: LD_VAR 0 1
46117: PPUSH
46118: LD_VAR 0 10
46122: PPUSH
46123: CALL_OW 250
46127: PPUSH
46128: LD_VAR 0 10
46132: PPUSH
46133: CALL_OW 251
46137: PPUSH
46138: CALL_OW 114
46142: GO 46158
// ComAttackUnit ( i , temp_unit ) ;
46144: LD_VAR 0 1
46148: PPUSH
46149: LD_VAR 0 10
46153: PPUSH
46154: CALL_OW 115
// end else
46158: GO 46321
// if temp_value then
46160: LD_VAR 0 9
46164: IFFALSE 46321
// begin temp_list = FindNonhumansNearUnit ( side , i , 20 , true ) ;
46166: LD_ADDR_VAR 0 2
46170: PUSH
46171: LD_VAR 0 16
46175: PPUSH
46176: LD_VAR 0 1
46180: PPUSH
46181: LD_INT 20
46183: PPUSH
46184: LD_INT 1
46186: PPUSH
46187: CALL 46987 0 4
46191: ST_TO_ADDR
// if temp_list > 0 then
46192: LD_VAR 0 2
46196: PUSH
46197: LD_INT 0
46199: GREATER
46200: IFFALSE 46241
// begin ComAgressiveMove ( i , GetX ( temp_list [ 1 ] ) , GetY ( temp_list [ 1 ] ) ) ;
46202: LD_VAR 0 1
46206: PPUSH
46207: LD_VAR 0 2
46211: PUSH
46212: LD_INT 1
46214: ARRAY
46215: PPUSH
46216: CALL_OW 250
46220: PPUSH
46221: LD_VAR 0 2
46225: PUSH
46226: LD_INT 1
46228: ARRAY
46229: PPUSH
46230: CALL_OW 251
46234: PPUSH
46235: CALL_OW 114
// end else
46239: GO 46321
// begin temp_list = FindNonhumansNearUnit ( side , i , 20 , false ) ;
46241: LD_ADDR_VAR 0 2
46245: PUSH
46246: LD_VAR 0 16
46250: PPUSH
46251: LD_VAR 0 1
46255: PPUSH
46256: LD_INT 20
46258: PPUSH
46259: LD_INT 0
46261: PPUSH
46262: CALL 46987 0 4
46266: ST_TO_ADDR
// if temp_list > 0 then
46267: LD_VAR 0 2
46271: PUSH
46272: LD_INT 0
46274: GREATER
46275: IFFALSE 46313
// begin temp_unit = NearestUnitToUnit ( temp_list , i ) ;
46277: LD_ADDR_VAR 0 10
46281: PUSH
46282: LD_VAR 0 2
46286: PPUSH
46287: LD_VAR 0 1
46291: PPUSH
46292: CALL_OW 74
46296: ST_TO_ADDR
// ComAttackUnit ( i , temp_unit ) ;
46297: LD_VAR 0 1
46301: PPUSH
46302: LD_VAR 0 10
46306: PPUSH
46307: CALL_OW 115
// end else
46311: GO 46321
// temp_value = false ;
46313: LD_ADDR_VAR 0 9
46317: PUSH
46318: LD_INT 0
46320: ST_TO_ADDR
// end ; end ; end ; if not temp_value then
46321: LD_VAR 0 9
46325: NOT
46326: IFFALSE 46748
// begin if ( ready_to_attack diff true ) > 0 then
46328: LD_VAR 0 21
46332: PUSH
46333: LD_INT 1
46335: DIFF
46336: PUSH
46337: LD_INT 0
46339: GREATER
46340: IFFALSE 46484
// begin if GetDistUnitXY ( i , attack_hexes [ strat ] [ hex_index [ strat ] ] [ 1 ] , attack_hexes [ strat ] [ hex_index [ strat ] ] [ 2 ] ) > 8 then
46342: LD_VAR 0 1
46346: PPUSH
46347: LD_VAR 0 17
46351: PUSH
46352: LD_VAR 0 7
46356: ARRAY
46357: PUSH
46358: LD_VAR 0 18
46362: PUSH
46363: LD_VAR 0 7
46367: ARRAY
46368: ARRAY
46369: PUSH
46370: LD_INT 1
46372: ARRAY
46373: PPUSH
46374: LD_VAR 0 17
46378: PUSH
46379: LD_VAR 0 7
46383: ARRAY
46384: PUSH
46385: LD_VAR 0 18
46389: PUSH
46390: LD_VAR 0 7
46394: ARRAY
46395: ARRAY
46396: PUSH
46397: LD_INT 2
46399: ARRAY
46400: PPUSH
46401: CALL_OW 297
46405: PUSH
46406: LD_INT 8
46408: GREATER
46409: IFFALSE 46482
// begin ComAgressiveMove ( i , attack_hexes [ strat ] [ hex_index [ strat ] ] [ 1 ] , attack_hexes [ strat ] [ hex_index [ strat ] ] [ 2 ] ) ;
46411: LD_VAR 0 1
46415: PPUSH
46416: LD_VAR 0 17
46420: PUSH
46421: LD_VAR 0 7
46425: ARRAY
46426: PUSH
46427: LD_VAR 0 18
46431: PUSH
46432: LD_VAR 0 7
46436: ARRAY
46437: ARRAY
46438: PUSH
46439: LD_INT 1
46441: ARRAY
46442: PPUSH
46443: LD_VAR 0 17
46447: PUSH
46448: LD_VAR 0 7
46452: ARRAY
46453: PUSH
46454: LD_VAR 0 18
46458: PUSH
46459: LD_VAR 0 7
46463: ARRAY
46464: ARRAY
46465: PUSH
46466: LD_INT 2
46468: ARRAY
46469: PPUSH
46470: CALL_OW 114
// group_ready = false ;
46474: LD_ADDR_VAR 0 11
46478: PUSH
46479: LD_INT 0
46481: ST_TO_ADDR
// end ; end else
46482: GO 46748
// begin if GetDistUnitXY ( i , attack_hexes [ strat ] [ unit_hex_index [ i ] ] [ 1 ] , attack_hexes [ strat ] [ unit_hex_index [ i ] ] [ 2 ] ) > 8 then
46484: LD_VAR 0 1
46488: PPUSH
46489: LD_VAR 0 17
46493: PUSH
46494: LD_VAR 0 7
46498: ARRAY
46499: PUSH
46500: LD_VAR 0 22
46504: PUSH
46505: LD_VAR 0 1
46509: ARRAY
46510: ARRAY
46511: PUSH
46512: LD_INT 1
46514: ARRAY
46515: PPUSH
46516: LD_VAR 0 17
46520: PUSH
46521: LD_VAR 0 7
46525: ARRAY
46526: PUSH
46527: LD_VAR 0 22
46531: PUSH
46532: LD_VAR 0 1
46536: ARRAY
46537: ARRAY
46538: PUSH
46539: LD_INT 2
46541: ARRAY
46542: PPUSH
46543: CALL_OW 297
46547: PUSH
46548: LD_INT 8
46550: GREATER
46551: IFFALSE 46618
// ComAgressiveMove ( i , attack_hexes [ strat ] [ unit_hex_index [ i ] ] [ 1 ] , attack_hexes [ strat ] [ unit_hex_index [ i ] ] [ 2 ] ) else
46553: LD_VAR 0 1
46557: PPUSH
46558: LD_VAR 0 17
46562: PUSH
46563: LD_VAR 0 7
46567: ARRAY
46568: PUSH
46569: LD_VAR 0 22
46573: PUSH
46574: LD_VAR 0 1
46578: ARRAY
46579: ARRAY
46580: PUSH
46581: LD_INT 1
46583: ARRAY
46584: PPUSH
46585: LD_VAR 0 17
46589: PUSH
46590: LD_VAR 0 7
46594: ARRAY
46595: PUSH
46596: LD_VAR 0 22
46600: PUSH
46601: LD_VAR 0 1
46605: ARRAY
46606: ARRAY
46607: PUSH
46608: LD_INT 2
46610: ARRAY
46611: PPUSH
46612: CALL_OW 114
46616: GO 46748
// if unit_hex_index [ i ] < attack_hexes [ strat ] then
46618: LD_VAR 0 22
46622: PUSH
46623: LD_VAR 0 1
46627: ARRAY
46628: PUSH
46629: LD_VAR 0 17
46633: PUSH
46634: LD_VAR 0 7
46638: ARRAY
46639: LESS
46640: IFFALSE 46748
// begin unit_hex_index = Replace ( unit_hex_index , i , unit_hex_index [ i ] + 1 ) ;
46642: LD_ADDR_VAR 0 22
46646: PUSH
46647: LD_VAR 0 22
46651: PPUSH
46652: LD_VAR 0 1
46656: PPUSH
46657: LD_VAR 0 22
46661: PUSH
46662: LD_VAR 0 1
46666: ARRAY
46667: PUSH
46668: LD_INT 1
46670: PLUS
46671: PPUSH
46672: CALL_OW 1
46676: ST_TO_ADDR
// if GetType ( i ) = unit_vehicle then
46677: LD_VAR 0 1
46681: PPUSH
46682: CALL_OW 247
46686: PUSH
46687: LD_INT 2
46689: EQUAL
46690: IFFALSE 46748
// begin val = IsDrivenBy ( i ) ;
46692: LD_ADDR_VAR 0 4
46696: PUSH
46697: LD_VAR 0 1
46701: PPUSH
46702: CALL_OW 311
46706: ST_TO_ADDR
// if val > 0 then
46707: LD_VAR 0 4
46711: PUSH
46712: LD_INT 0
46714: GREATER
46715: IFFALSE 46748
// unit_hex_index = Replace ( unit_hex_index , val , unit_hex_index [ i ] ) ;
46717: LD_ADDR_VAR 0 22
46721: PUSH
46722: LD_VAR 0 22
46726: PPUSH
46727: LD_VAR 0 4
46731: PPUSH
46732: LD_VAR 0 22
46736: PUSH
46737: LD_VAR 0 1
46741: ARRAY
46742: PPUSH
46743: CALL_OW 1
46747: ST_TO_ADDR
// end ; end ; end ; end ; end ;
46748: GO 45565
46750: POP
46751: POP
// if group_ready and ( ready_to_attack diff true ) > 0 then
46752: LD_VAR 0 11
46756: PUSH
46757: LD_VAR 0 21
46761: PUSH
46762: LD_INT 1
46764: DIFF
46765: PUSH
46766: LD_INT 0
46768: GREATER
46769: AND
46770: IFFALSE 46878
// begin if hex_index [ strat ] = hex_index_gather [ strat ] then
46772: LD_VAR 0 18
46776: PUSH
46777: LD_VAR 0 7
46781: ARRAY
46782: PUSH
46783: LD_VAR 0 19
46787: PUSH
46788: LD_VAR 0 7
46792: ARRAY
46793: EQUAL
46794: IFFALSE 46819
// ready_to_attack = Replace ( ready_to_attack , strat , true ) ;
46796: LD_ADDR_VAR 0 21
46800: PUSH
46801: LD_VAR 0 21
46805: PPUSH
46806: LD_VAR 0 7
46810: PPUSH
46811: LD_INT 1
46813: PPUSH
46814: CALL_OW 1
46818: ST_TO_ADDR
// if hex_index [ strat ] < hex_index_gather [ strat ] then
46819: LD_VAR 0 18
46823: PUSH
46824: LD_VAR 0 7
46828: ARRAY
46829: PUSH
46830: LD_VAR 0 19
46834: PUSH
46835: LD_VAR 0 7
46839: ARRAY
46840: LESS
46841: IFFALSE 46878
// hex_index = Replace ( hex_index , strat , hex_index [ strat ] + 1 ) ;
46843: LD_ADDR_VAR 0 18
46847: PUSH
46848: LD_VAR 0 18
46852: PPUSH
46853: LD_VAR 0 7
46857: PPUSH
46858: LD_VAR 0 18
46862: PUSH
46863: LD_VAR 0 7
46867: ARRAY
46868: PUSH
46869: LD_INT 1
46871: PLUS
46872: PPUSH
46873: CALL_OW 1
46877: ST_TO_ADDR
// end ; if not ready_to_attack [ strat ] then
46878: LD_VAR 0 21
46882: PUSH
46883: LD_VAR 0 7
46887: ARRAY
46888: NOT
46889: IFFALSE 46976
// if UnitFilter ( soldiers [ strat ] ^ vehicles [ strat ] ^ mechanics [ strat ] , [ f_not , [ f_lives , 1000 ] ] ) > 0 then
46891: LD_VAR 0 14
46895: PUSH
46896: LD_VAR 0 7
46900: ARRAY
46901: PUSH
46902: LD_VAR 0 13
46906: PUSH
46907: LD_VAR 0 7
46911: ARRAY
46912: ADD
46913: PUSH
46914: LD_VAR 0 15
46918: PUSH
46919: LD_VAR 0 7
46923: ARRAY
46924: ADD
46925: PPUSH
46926: LD_INT 3
46928: PUSH
46929: LD_INT 24
46931: PUSH
46932: LD_INT 1000
46934: PUSH
46935: EMPTY
46936: LIST
46937: LIST
46938: PUSH
46939: EMPTY
46940: LIST
46941: LIST
46942: PPUSH
46943: CALL_OW 72
46947: PUSH
46948: LD_INT 0
46950: GREATER
46951: IFFALSE 46976
// ready_to_attack = Replace ( ready_to_attack , strat , true ) ;
46953: LD_ADDR_VAR 0 21
46957: PUSH
46958: LD_VAR 0 21
46962: PPUSH
46963: LD_VAR 0 7
46967: PPUSH
46968: LD_INT 1
46970: PPUSH
46971: CALL_OW 1
46975: ST_TO_ADDR
// end ;
46976: GO 44731
46978: POP
46979: POP
// until false ;
46980: LD_INT 0
46982: IFFALSE 44500
// end ;
46984: PPOPN 22
46986: END
// export function FindNonhumansNearUnit ( side , un , dist , only_dangerous ) ; var temp_list ; begin
46987: LD_INT 0
46989: PPUSH
46990: PPUSH
// temp_list = FilterAllUnits ( [ [ f_enemy , side ] , [ f_not , [ f_type , unit_human ] ] , [ f_dist , un , dist ] , [ f_see , side ] ] ) ;
46991: LD_ADDR_VAR 0 6
46995: PUSH
46996: LD_INT 81
46998: PUSH
46999: LD_VAR 0 1
47003: PUSH
47004: EMPTY
47005: LIST
47006: LIST
47007: PUSH
47008: LD_INT 3
47010: PUSH
47011: LD_INT 21
47013: PUSH
47014: LD_INT 1
47016: PUSH
47017: EMPTY
47018: LIST
47019: LIST
47020: PUSH
47021: EMPTY
47022: LIST
47023: LIST
47024: PUSH
47025: LD_INT 91
47027: PUSH
47028: LD_VAR 0 2
47032: PUSH
47033: LD_VAR 0 3
47037: PUSH
47038: EMPTY
47039: LIST
47040: LIST
47041: LIST
47042: PUSH
47043: LD_INT 101
47045: PUSH
47046: LD_VAR 0 1
47050: PUSH
47051: EMPTY
47052: LIST
47053: LIST
47054: PUSH
47055: EMPTY
47056: LIST
47057: LIST
47058: LIST
47059: LIST
47060: PPUSH
47061: CALL_OW 69
47065: ST_TO_ADDR
// if only_dangerous then
47066: LD_VAR 0 4
47070: IFFALSE 47089
// result = FindDangerousNonhumanUnits ( temp_list ) else
47072: LD_ADDR_VAR 0 5
47076: PUSH
47077: LD_VAR 0 6
47081: PPUSH
47082: CALL 47104 0 1
47086: ST_TO_ADDR
47087: GO 47099
// result = temp_list ;
47089: LD_ADDR_VAR 0 5
47093: PUSH
47094: LD_VAR 0 6
47098: ST_TO_ADDR
// end ;
47099: LD_VAR 0 5
47103: RET
// export function FindDangerousNonhumanUnits ( list ) ; var weapon_list , temp_list , i , btype , b , val ; begin
47104: LD_INT 0
47106: PPUSH
47107: PPUSH
47108: PPUSH
47109: PPUSH
47110: PPUSH
47111: PPUSH
47112: PPUSH
// weapon_list = [ us_machine_gun , us_light_gun , us_gatling_gun , us_double_gun , us_heavy_gun , us_rocket_launcher , us_siberium_rocket , us_laser , us_double_laser , ar_multimissile_ballista , ar_light_gun , ar_double_machine_gun , ar_gatling_gun , ar_flame_thrower , ar_gun , ar_rocket_launcher , ar_selfpropelled_bomb , ru_heavy_machine_gun , ru_gatling_gun , ru_gun , ru_rocket_launcher , ru_heavy_gun , ru_rocket , ru_siberium_rocket , ru_time_lapser ] ;
47113: LD_ADDR_VAR 0 3
47117: PUSH
47118: LD_INT 2
47120: PUSH
47121: LD_INT 3
47123: PUSH
47124: LD_INT 4
47126: PUSH
47127: LD_INT 5
47129: PUSH
47130: LD_INT 6
47132: PUSH
47133: LD_INT 7
47135: PUSH
47136: LD_INT 8
47138: PUSH
47139: LD_INT 9
47141: PUSH
47142: LD_INT 10
47144: PUSH
47145: LD_INT 22
47147: PUSH
47148: LD_INT 23
47150: PUSH
47151: LD_INT 24
47153: PUSH
47154: LD_INT 25
47156: PUSH
47157: LD_INT 26
47159: PUSH
47160: LD_INT 27
47162: PUSH
47163: LD_INT 28
47165: PUSH
47166: LD_INT 29
47168: PUSH
47169: LD_INT 42
47171: PUSH
47172: LD_INT 43
47174: PUSH
47175: LD_INT 44
47177: PUSH
47178: LD_INT 45
47180: PUSH
47181: LD_INT 46
47183: PUSH
47184: LD_INT 47
47186: PUSH
47187: LD_INT 48
47189: PUSH
47190: LD_INT 49
47192: PUSH
47193: EMPTY
47194: LIST
47195: LIST
47196: LIST
47197: LIST
47198: LIST
47199: LIST
47200: LIST
47201: LIST
47202: LIST
47203: LIST
47204: LIST
47205: LIST
47206: LIST
47207: LIST
47208: LIST
47209: LIST
47210: LIST
47211: LIST
47212: LIST
47213: LIST
47214: LIST
47215: LIST
47216: LIST
47217: LIST
47218: LIST
47219: ST_TO_ADDR
// list = UnitFilter ( list , [ f_ok ] ) ;
47220: LD_ADDR_VAR 0 1
47224: PUSH
47225: LD_VAR 0 1
47229: PPUSH
47230: LD_INT 50
47232: PUSH
47233: EMPTY
47234: LIST
47235: PPUSH
47236: CALL_OW 72
47240: ST_TO_ADDR
// result = [ ] ;
47241: LD_ADDR_VAR 0 2
47245: PUSH
47246: EMPTY
47247: ST_TO_ADDR
// for i in list do
47248: LD_ADDR_VAR 0 5
47252: PUSH
47253: LD_VAR 0 1
47257: PUSH
47258: FOR_IN
47259: IFFALSE 47638
// case GetType ( i ) of unit_vehicle :
47261: LD_VAR 0 5
47265: PPUSH
47266: CALL_OW 247
47270: PUSH
47271: LD_INT 2
47273: DOUBLE
47274: EQUAL
47275: IFTRUE 47279
47277: GO 47405
47279: POP
// begin case GetControl ( i ) of control_manual , control_rider :
47280: LD_VAR 0 5
47284: PPUSH
47285: CALL_OW 263
47289: PUSH
47290: LD_INT 1
47292: DOUBLE
47293: EQUAL
47294: IFTRUE 47304
47296: LD_INT 4
47298: DOUBLE
47299: EQUAL
47300: IFTRUE 47304
47302: GO 47324
47304: POP
// begin if UnitsInside ( i ) = 0 then
47305: LD_VAR 0 5
47309: PPUSH
47310: CALL_OW 313
47314: PUSH
47315: LD_INT 0
47317: EQUAL
47318: IFFALSE 47322
// continue ;
47320: GO 47258
// end ; control_remote :
47322: GO 47370
47324: LD_INT 2
47326: DOUBLE
47327: EQUAL
47328: IFTRUE 47332
47330: GO 47352
47332: POP
// begin if IsControledBy ( i ) = 0 then
47333: LD_VAR 0 5
47337: PPUSH
47338: CALL_OW 312
47342: PUSH
47343: LD_INT 0
47345: EQUAL
47346: IFFALSE 47350
// continue ;
47348: GO 47258
// end ; control_computer , control_apeman :
47350: GO 47370
47352: LD_INT 3
47354: DOUBLE
47355: EQUAL
47356: IFTRUE 47366
47358: LD_INT 5
47360: DOUBLE
47361: EQUAL
47362: IFTRUE 47366
47364: GO 47369
47366: POP
// begin end ; end ;
47367: GO 47370
47369: POP
// if GetWeapon ( i ) in weapon_list then
47370: LD_VAR 0 5
47374: PPUSH
47375: CALL_OW 264
47379: PUSH
47380: LD_VAR 0 3
47384: IN
47385: IFFALSE 47403
// result = result ^ i ;
47387: LD_ADDR_VAR 0 2
47391: PUSH
47392: LD_VAR 0 2
47396: PUSH
47397: LD_VAR 0 5
47401: ADD
47402: ST_TO_ADDR
// end ; unit_building :
47403: GO 47636
47405: LD_INT 3
47407: DOUBLE
47408: EQUAL
47409: IFTRUE 47413
47411: GO 47635
47413: POP
// begin btype = GetBType ( i ) ;
47414: LD_ADDR_VAR 0 6
47418: PUSH
47419: LD_VAR 0 5
47423: PPUSH
47424: CALL_OW 266
47428: ST_TO_ADDR
// case btype of b_turret :
47429: LD_VAR 0 6
47433: PUSH
47434: LD_INT 33
47436: DOUBLE
47437: EQUAL
47438: IFTRUE 47442
47440: GO 47445
47442: POP
// begin end ; b_bunker , b_breastwork , b_armoury , b_barracks , b_fort :
47443: GO 47500
47445: LD_INT 32
47447: DOUBLE
47448: EQUAL
47449: IFTRUE 47477
47451: LD_INT 31
47453: DOUBLE
47454: EQUAL
47455: IFTRUE 47477
47457: LD_INT 4
47459: DOUBLE
47460: EQUAL
47461: IFTRUE 47477
47463: LD_INT 5
47465: DOUBLE
47466: EQUAL
47467: IFTRUE 47477
47469: LD_INT 35
47471: DOUBLE
47472: EQUAL
47473: IFTRUE 47477
47475: GO 47497
47477: POP
// begin if UnitsInside ( i ) = 0 then
47478: LD_VAR 0 5
47482: PPUSH
47483: CALL_OW 313
47487: PUSH
47488: LD_INT 0
47490: EQUAL
47491: IFFALSE 47495
// continue ;
47493: GO 47258
// end ; else
47495: GO 47500
47497: POP
// continue ; end ;
47498: GO 47258
// if btype in [ b_bunker , b_turret ] then
47500: LD_VAR 0 6
47504: PUSH
47505: LD_INT 32
47507: PUSH
47508: LD_INT 33
47510: PUSH
47511: EMPTY
47512: LIST
47513: LIST
47514: IN
47515: IFFALSE 47617
// if not GetBWeapon ( i ) in weapon_list then
47517: LD_VAR 0 5
47521: PPUSH
47522: CALL_OW 269
47526: PUSH
47527: LD_VAR 0 3
47531: IN
47532: NOT
47533: IFFALSE 47539
// continue else
47535: GO 47258
47537: GO 47617
// begin b = GetBase ( i ) ;
47539: LD_ADDR_VAR 0 7
47543: PUSH
47544: LD_VAR 0 5
47548: PPUSH
47549: CALL_OW 274
47553: ST_TO_ADDR
// val = false ;
47554: LD_ADDR_VAR 0 8
47558: PUSH
47559: LD_INT 0
47561: ST_TO_ADDR
// if b = 0 then
47562: LD_VAR 0 7
47566: PUSH
47567: LD_INT 0
47569: EQUAL
47570: IFFALSE 47582
// val = true else
47572: LD_ADDR_VAR 0 8
47576: PUSH
47577: LD_INT 1
47579: ST_TO_ADDR
47580: GO 47609
// if GetEnergy ( b ) [ 4 ] = 0 then
47582: LD_VAR 0 7
47586: PPUSH
47587: CALL_OW 278
47591: PUSH
47592: LD_INT 4
47594: ARRAY
47595: PUSH
47596: LD_INT 0
47598: EQUAL
47599: IFFALSE 47609
// val = true ;
47601: LD_ADDR_VAR 0 8
47605: PUSH
47606: LD_INT 1
47608: ST_TO_ADDR
// if val then
47609: LD_VAR 0 8
47613: IFFALSE 47617
// continue ;
47615: GO 47258
// end ; result = result ^ i ;
47617: LD_ADDR_VAR 0 2
47621: PUSH
47622: LD_VAR 0 2
47626: PUSH
47627: LD_VAR 0 5
47631: ADD
47632: ST_TO_ADDR
// end ; end ;
47633: GO 47636
47635: POP
47636: GO 47258
47638: POP
47639: POP
// end ;
47640: LD_VAR 0 2
47644: RET
// every 0 0$1 trigger russians_attack = 1 do var val , temp_value , temp_list ;
47645: LD_EXP 84
47649: PUSH
47650: LD_INT 1
47652: EQUAL
47653: IFFALSE 47987
47655: GO 47657
47657: DISABLE
47658: LD_INT 0
47660: PPUSH
47661: PPUSH
47662: PPUSH
// begin repeat wait ( 1 ) ;
47663: LD_INT 1
47665: PPUSH
47666: CALL_OW 67
// val = 1 ;
47670: LD_ADDR_VAR 0 1
47674: PUSH
47675: LD_INT 1
47677: ST_TO_ADDR
// while val <= time_shift_bazookers do
47678: LD_VAR 0 1
47682: PUSH
47683: LD_EXP 98
47687: LESSEQUAL
47688: IFFALSE 47983
// begin if tick = time_shift_bazookers [ val ] [ 4 ] then
47690: LD_OWVAR 1
47694: PUSH
47695: LD_EXP 98
47699: PUSH
47700: LD_VAR 0 1
47704: ARRAY
47705: PUSH
47706: LD_INT 4
47708: ARRAY
47709: EQUAL
47710: IFFALSE 47728
// begin val = val + 1 ;
47712: LD_ADDR_VAR 0 1
47716: PUSH
47717: LD_VAR 0 1
47721: PUSH
47722: LD_INT 1
47724: PLUS
47725: ST_TO_ADDR
// continue ;
47726: GO 47678
// end ; temp_value = false ;
47728: LD_ADDR_VAR 0 2
47732: PUSH
47733: LD_INT 0
47735: ST_TO_ADDR
// temp_list = GetTaskList ( time_shift_bazookers [ val ] [ 3 ] ) ;
47736: LD_ADDR_VAR 0 3
47740: PUSH
47741: LD_EXP 98
47745: PUSH
47746: LD_VAR 0 1
47750: ARRAY
47751: PUSH
47752: LD_INT 3
47754: ARRAY
47755: PPUSH
47756: CALL_OW 437
47760: ST_TO_ADDR
// if IsOk ( time_shift_bazookers [ val ] [ 3 ] ) then
47761: LD_EXP 98
47765: PUSH
47766: LD_VAR 0 1
47770: ARRAY
47771: PUSH
47772: LD_INT 3
47774: ARRAY
47775: PPUSH
47776: CALL_OW 302
47780: IFFALSE 47831
// begin if temp_list = 0 then
47782: LD_VAR 0 3
47786: PUSH
47787: LD_INT 0
47789: EQUAL
47790: IFFALSE 47802
// temp_value = true else
47792: LD_ADDR_VAR 0 2
47796: PUSH
47797: LD_INT 1
47799: ST_TO_ADDR
47800: GO 47829
// if not temp_list [ 1 ] [ 1 ] = & then
47802: LD_VAR 0 3
47806: PUSH
47807: LD_INT 1
47809: ARRAY
47810: PUSH
47811: LD_INT 1
47813: ARRAY
47814: PUSH
47815: LD_STRING &
47817: EQUAL
47818: NOT
47819: IFFALSE 47829
// temp_value = true ;
47821: LD_ADDR_VAR 0 2
47825: PUSH
47826: LD_INT 1
47828: ST_TO_ADDR
// end else
47829: GO 47853
// begin time_shift_bazookers = Delete ( time_shift_bazookers , val ) ;
47831: LD_ADDR_EXP 98
47835: PUSH
47836: LD_EXP 98
47840: PPUSH
47841: LD_VAR 0 1
47845: PPUSH
47846: CALL_OW 3
47850: ST_TO_ADDR
// continue ;
47851: GO 47678
// end ; if temp_value then
47853: LD_VAR 0 2
47857: IFFALSE 47967
// begin time_shift_hexes = Insert ( time_shift_hexes , 1 , [ time_shift_bazookers [ val ] [ 1 ] , time_shift_bazookers [ val ] [ 2 ] , time_shift_data [ russians ] [ 1 ] ] ) ;
47859: LD_ADDR_EXP 96
47863: PUSH
47864: LD_EXP 96
47868: PPUSH
47869: LD_INT 1
47871: PPUSH
47872: LD_EXP 98
47876: PUSH
47877: LD_VAR 0 1
47881: ARRAY
47882: PUSH
47883: LD_INT 1
47885: ARRAY
47886: PUSH
47887: LD_EXP 98
47891: PUSH
47892: LD_VAR 0 1
47896: ARRAY
47897: PUSH
47898: LD_INT 2
47900: ARRAY
47901: PUSH
47902: LD_EXP 97
47906: PUSH
47907: LD_EXP 3
47911: ARRAY
47912: PUSH
47913: LD_INT 1
47915: ARRAY
47916: PUSH
47917: EMPTY
47918: LIST
47919: LIST
47920: LIST
47921: PPUSH
47922: CALL_OW 2
47926: ST_TO_ADDR
// time_shift_bazookers = Delete ( time_shift_bazookers , val ) ;
47927: LD_ADDR_EXP 98
47931: PUSH
47932: LD_EXP 98
47936: PPUSH
47937: LD_VAR 0 1
47941: PPUSH
47942: CALL_OW 3
47946: ST_TO_ADDR
// if russians_attack = 1 then
47947: LD_EXP 84
47951: PUSH
47952: LD_INT 1
47954: EQUAL
47955: IFFALSE 47965
// time_shifting_used_in_first_attack = true ;
47957: LD_ADDR_EXP 101
47961: PUSH
47962: LD_INT 1
47964: ST_TO_ADDR
// continue ;
47965: GO 47678
// end ; val = val + 1 ;
47967: LD_ADDR_VAR 0 1
47971: PUSH
47972: LD_VAR 0 1
47976: PUSH
47977: LD_INT 1
47979: PLUS
47980: ST_TO_ADDR
// end ;
47981: GO 47678
// until false ;
47983: LD_INT 0
47985: IFFALSE 47663
// end ;
47987: PPOPN 3
47989: END
// every 0 0$1 + 0 0$0.3 do var val , temp_list_2 , time ;
47990: GO 47992
47992: DISABLE
47993: LD_INT 0
47995: PPUSH
47996: PPUSH
47997: PPUSH
// begin repeat wait ( 0 0$1 ) ;
47998: LD_INT 35
48000: PPUSH
48001: CALL_OW 67
// val = 1 ;
48005: LD_ADDR_VAR 0 1
48009: PUSH
48010: LD_INT 1
48012: ST_TO_ADDR
// while val <= time_shift_hexes do
48013: LD_VAR 0 1
48017: PUSH
48018: LD_EXP 96
48022: LESSEQUAL
48023: IFFALSE 48153
// begin time = time_shift_hexes [ val ] [ 3 ] - 0 0$1 ;
48025: LD_ADDR_VAR 0 3
48029: PUSH
48030: LD_EXP 96
48034: PUSH
48035: LD_VAR 0 1
48039: ARRAY
48040: PUSH
48041: LD_INT 3
48043: ARRAY
48044: PUSH
48045: LD_INT 35
48047: MINUS
48048: ST_TO_ADDR
// if time <= 0 0$0 then
48049: LD_VAR 0 3
48053: PUSH
48054: LD_INT 0
48056: LESSEQUAL
48057: IFFALSE 48083
// begin time_shift_hexes = Delete ( time_shift_hexes , val ) ;
48059: LD_ADDR_EXP 96
48063: PUSH
48064: LD_EXP 96
48068: PPUSH
48069: LD_VAR 0 1
48073: PPUSH
48074: CALL_OW 3
48078: ST_TO_ADDR
// continue ;
48079: GO 48013
// end else
48081: GO 48137
// begin temp_list_2 = Replace ( time_shift_hexes [ val ] , 3 , time ) ;
48083: LD_ADDR_VAR 0 2
48087: PUSH
48088: LD_EXP 96
48092: PUSH
48093: LD_VAR 0 1
48097: ARRAY
48098: PPUSH
48099: LD_INT 3
48101: PPUSH
48102: LD_VAR 0 3
48106: PPUSH
48107: CALL_OW 1
48111: ST_TO_ADDR
// time_shift_hexes = Replace ( time_shift_hexes , val , temp_list_2 ) ;
48112: LD_ADDR_EXP 96
48116: PUSH
48117: LD_EXP 96
48121: PPUSH
48122: LD_VAR 0 1
48126: PPUSH
48127: LD_VAR 0 2
48131: PPUSH
48132: CALL_OW 1
48136: ST_TO_ADDR
// end ; val = val + 1 ;
48137: LD_ADDR_VAR 0 1
48141: PUSH
48142: LD_VAR 0 1
48146: PUSH
48147: LD_INT 1
48149: PLUS
48150: ST_TO_ADDR
// end ;
48151: GO 48013
// until false ;
48153: LD_INT 0
48155: IFFALSE 47998
// end ; end_of_file
48157: PPOPN 3
48159: END
// every 0 0$1 + 0 0$0.6 do
48160: GO 48162
48162: DISABLE
// begin repeat wait ( 0 0$1 ) ;
48163: LD_INT 35
48165: PPUSH
48166: CALL_OW 67
// if russians_attack <> 4 or artifact_cargo_bay_status <> 2 then
48170: LD_EXP 84
48174: PUSH
48175: LD_INT 4
48177: NONEQUAL
48178: PUSH
48179: LD_EXP 94
48183: PUSH
48184: LD_INT 2
48186: NONEQUAL
48187: OR
48188: IFFALSE 48192
// continue ;
48190: GO 48163
// DialogueOn ;
48192: CALL_OW 6
// Say ( Heike , D8-H-1 ) ;
48196: LD_EXP 7
48200: PPUSH
48201: LD_STRING D8-H-1
48203: PPUSH
48204: CALL_OW 88
// dwait ( 0 0$0.2 ) ;
48208: LD_INT 7
48210: PPUSH
48211: CALL_OW 68
// EndMission ;
48215: CALL 48228 0 0
// DialogueOff ;
48219: CALL_OW 7
// until false ;
48223: LD_INT 0
48225: IFFALSE 48163
// end ;
48227: END
// function EndMission ; var val , humans_list , un_list , name_list , bol1 , bol2 ; begin
48228: LD_INT 0
48230: PPUSH
48231: PPUSH
48232: PPUSH
48233: PPUSH
48234: PPUSH
48235: PPUSH
48236: PPUSH
// if IsLive ( Gossudarov ) then
48237: LD_EXP 13
48241: PPUSH
48242: CALL_OW 300
48246: IFFALSE 48270
// begin val = 1 ;
48248: LD_ADDR_VAR 0 2
48252: PUSH
48253: LD_INT 1
48255: ST_TO_ADDR
// SaveCharacters ( Gossudarov , Gossudarov_10 ) ;
48256: LD_EXP 13
48260: PPUSH
48261: LD_STRING Gossudarov_10
48263: PPUSH
48264: CALL_OW 38
// end else
48268: GO 48279
// val = - 1 ;
48270: LD_ADDR_VAR 0 2
48274: PUSH
48275: LD_INT 1
48277: NEG
48278: ST_TO_ADDR
// AddMedal ( GossudarovCaptured , val ) ;
48279: LD_STRING GossudarovCaptured
48281: PPUSH
48282: LD_VAR 0 2
48286: PPUSH
48287: CALL_OW 101
// if quick_action then
48291: LD_EXP 79
48295: IFFALSE 48307
// val = 1 else
48297: LD_ADDR_VAR 0 2
48301: PUSH
48302: LD_INT 1
48304: ST_TO_ADDR
48305: GO 48316
// val = - 1 ;
48307: LD_ADDR_VAR 0 2
48311: PUSH
48312: LD_INT 1
48314: NEG
48315: ST_TO_ADDR
// AddMedal ( QuickAction , val ) ;
48316: LD_STRING QuickAction
48318: PPUSH
48319: LD_VAR 0 2
48323: PPUSH
48324: CALL_OW 101
// humans_list = UnitFilter ( starting_humans , [ f_alive ] ) ;
48328: LD_ADDR_VAR 0 3
48332: PUSH
48333: LD_EXP 85
48337: PPUSH
48338: LD_INT 51
48340: PUSH
48341: EMPTY
48342: LIST
48343: PPUSH
48344: CALL_OW 72
48348: ST_TO_ADDR
// bol1 = false ;
48349: LD_ADDR_VAR 0 6
48353: PUSH
48354: LD_INT 0
48356: ST_TO_ADDR
// bol2 = false ;
48357: LD_ADDR_VAR 0 7
48361: PUSH
48362: LD_INT 0
48364: ST_TO_ADDR
// if investigate_time_shifting > 0 then
48365: LD_EXP 95
48369: PUSH
48370: LD_INT 0
48372: GREATER
48373: IFFALSE 48434
// begin bol1 = true ;
48375: LD_ADDR_VAR 0 6
48379: PUSH
48380: LD_INT 1
48382: ST_TO_ADDR
// if investigate_time_shifting = 2 then
48383: LD_EXP 95
48387: PUSH
48388: LD_INT 2
48390: EQUAL
48391: IFFALSE 48411
// begin val = 1 ;
48393: LD_ADDR_VAR 0 2
48397: PUSH
48398: LD_INT 1
48400: ST_TO_ADDR
// bol2 = true ;
48401: LD_ADDR_VAR 0 7
48405: PUSH
48406: LD_INT 1
48408: ST_TO_ADDR
// end else
48409: GO 48420
// val = - 1 ;
48411: LD_ADDR_VAR 0 2
48415: PUSH
48416: LD_INT 1
48418: NEG
48419: ST_TO_ADDR
// AddMedal ( TimeShiftingInvestigation , val ) ;
48420: LD_STRING TimeShiftingInvestigation
48422: PPUSH
48423: LD_VAR 0 2
48427: PPUSH
48428: CALL_OW 101
// end else
48432: GO 48505
// begin case starting_humans - humans_list of 0 :
48434: LD_EXP 85
48438: PUSH
48439: LD_VAR 0 3
48443: MINUS
48444: PUSH
48445: LD_INT 0
48447: DOUBLE
48448: EQUAL
48449: IFTRUE 48453
48451: GO 48464
48453: POP
// val = 1 ; 1 :
48454: LD_ADDR_VAR 0 2
48458: PUSH
48459: LD_INT 1
48461: ST_TO_ADDR
48462: GO 48493
48464: LD_INT 1
48466: DOUBLE
48467: EQUAL
48468: IFTRUE 48472
48470: GO 48483
48472: POP
// val = 2 ; else
48473: LD_ADDR_VAR 0 2
48477: PUSH
48478: LD_INT 2
48480: ST_TO_ADDR
48481: GO 48493
48483: POP
// val = - 1 ; end ;
48484: LD_ADDR_VAR 0 2
48488: PUSH
48489: LD_INT 1
48491: NEG
48492: ST_TO_ADDR
// AddMedal ( Casualties , val ) ;
48493: LD_STRING Casualties
48495: PPUSH
48496: LD_VAR 0 2
48500: PPUSH
48501: CALL_OW 101
// end ; GiveMedals ( Medals ) ;
48505: LD_STRING Medals
48507: PPUSH
48508: CALL_OW 102
// SaveVariable ( bol1 , Seen_time_shifting_10 ) ;
48512: LD_VAR 0 6
48516: PPUSH
48517: LD_STRING Seen_time_shifting_10
48519: PPUSH
48520: CALL_OW 39
// SaveVariable ( bol2 , Investigated_time_shifting_10 ) ;
48524: LD_VAR 0 7
48528: PPUSH
48529: LD_STRING Investigated_time_shifting_10
48531: PPUSH
48532: CALL_OW 39
// SaveVariable ( traitors_under_player_control , Cooperates_with_traitors_10 ) ;
48536: LD_EXP 102
48540: PPUSH
48541: LD_STRING Cooperates_with_traitors_10
48543: PPUSH
48544: CALL_OW 39
// SaveVariable ( gensher_answer = 1 , Cooperates_with_UPF_10 ) ;
48548: LD_EXP 74
48552: PUSH
48553: LD_INT 1
48555: EQUAL
48556: PPUSH
48557: LD_STRING Cooperates_with_UPF_10
48559: PPUSH
48560: CALL_OW 39
// if IsLive ( Gonzo ) then
48564: LD_EXP 11
48568: PPUSH
48569: CALL_OW 300
48573: IFFALSE 48591
// humans_list = humans_list ^ Gonzo ;
48575: LD_ADDR_VAR 0 3
48579: PUSH
48580: LD_VAR 0 3
48584: PUSH
48585: LD_EXP 11
48589: ADD
48590: ST_TO_ADDR
// RewardPeople ( humans_list ) ;
48591: LD_VAR 0 3
48595: PPUSH
48596: CALL_OW 43
// SaveCharacters ( Heike , Heike_10 ) ;
48600: LD_EXP 7
48604: PPUSH
48605: LD_STRING Heike_10
48607: PPUSH
48608: CALL_OW 38
// un_list = [ Oswald , Kurt , Dwayne , Gonzo ] ;
48612: LD_ADDR_VAR 0 4
48616: PUSH
48617: LD_EXP 9
48621: PUSH
48622: LD_EXP 10
48626: PUSH
48627: LD_EXP 8
48631: PUSH
48632: LD_EXP 11
48636: PUSH
48637: EMPTY
48638: LIST
48639: LIST
48640: LIST
48641: LIST
48642: ST_TO_ADDR
// name_list = [ Oswald , Kurt , Dwayne , Gonzo ] ;
48643: LD_ADDR_VAR 0 5
48647: PUSH
48648: LD_STRING Oswald
48650: PUSH
48651: LD_STRING Kurt
48653: PUSH
48654: LD_STRING Dwayne
48656: PUSH
48657: LD_STRING Gonzo
48659: PUSH
48660: EMPTY
48661: LIST
48662: LIST
48663: LIST
48664: LIST
48665: ST_TO_ADDR
// for val = 1 to un_list do
48666: LD_ADDR_VAR 0 2
48670: PUSH
48671: DOUBLE
48672: LD_INT 1
48674: DEC
48675: ST_TO_ADDR
48676: LD_VAR 0 4
48680: PUSH
48681: FOR_TO
48682: IFFALSE 48734
// if un_list [ val ] in humans_list then
48684: LD_VAR 0 4
48688: PUSH
48689: LD_VAR 0 2
48693: ARRAY
48694: PUSH
48695: LD_VAR 0 3
48699: IN
48700: IFFALSE 48732
// SaveCharacters ( un_list [ val ] , name_list [ val ] & _10 ) ;
48702: LD_VAR 0 4
48706: PUSH
48707: LD_VAR 0 2
48711: ARRAY
48712: PPUSH
48713: LD_VAR 0 5
48717: PUSH
48718: LD_VAR 0 2
48722: ARRAY
48723: PUSH
48724: LD_STRING _10
48726: STR
48727: PPUSH
48728: CALL_OW 38
48732: GO 48681
48734: POP
48735: POP
// SaveVariable ( oswald_is_substitute , Oswald_is_substitute_10 ) ;
48736: LD_EXP 62
48740: PPUSH
48741: LD_STRING Oswald_is_substitute_10
48743: PPUSH
48744: CALL_OW 39
// SaveVariable ( kurt_is_substitute , Kurt_is_substitute_10 ) ;
48748: LD_EXP 63
48752: PPUSH
48753: LD_STRING Kurt_is_substitute_10
48755: PPUSH
48756: CALL_OW 39
// if GetLives ( traitors_leader ) > 0 then
48760: LD_EXP 15
48764: PPUSH
48765: CALL_OW 256
48769: PUSH
48770: LD_INT 0
48772: GREATER
48773: IFFALSE 48800
// begin SaveCharacters ( traitors_leader , Traitors_leader_10 ) ;
48775: LD_EXP 15
48779: PPUSH
48780: LD_STRING Traitors_leader_10
48782: PPUSH
48783: CALL_OW 38
// SaveVariable ( not traitors_leader_is_substitute , Traitors_leader_is_Gordon_10 ) ;
48787: LD_EXP 67
48791: NOT
48792: PPUSH
48793: LD_STRING Traitors_leader_is_Gordon_10
48795: PPUSH
48796: CALL_OW 39
// end ; if GetLives ( Willard ) > 0 then
48800: LD_EXP 16
48804: PPUSH
48805: CALL_OW 256
48809: PUSH
48810: LD_INT 0
48812: GREATER
48813: IFFALSE 48827
// SaveCharacters ( Willard , Willard_10 ) ;
48815: LD_EXP 16
48819: PPUSH
48820: LD_STRING Willard_10
48822: PPUSH
48823: CALL_OW 38
// if GetLives ( scout ) > 0 then
48827: LD_EXP 14
48831: PPUSH
48832: CALL_OW 256
48836: PUSH
48837: LD_INT 0
48839: GREATER
48840: IFFALSE 48854
// SaveCharacters ( scout , Traitors_scout_10 ) ;
48842: LD_EXP 14
48846: PPUSH
48847: LD_STRING Traitors_scout_10
48849: PPUSH
48850: CALL_OW 38
// un_list = [ ] ;
48854: LD_ADDR_VAR 0 4
48858: PUSH
48859: EMPTY
48860: ST_TO_ADDR
// for val in original_traitors_humans diff [ traitors_leader , Willard ] do
48861: LD_ADDR_VAR 0 2
48865: PUSH
48866: LD_EXP 73
48870: PUSH
48871: LD_EXP 15
48875: PUSH
48876: LD_EXP 16
48880: PUSH
48881: EMPTY
48882: LIST
48883: LIST
48884: DIFF
48885: PUSH
48886: FOR_IN
48887: IFFALSE 48922
// if GetLives ( val ) > 0 then
48889: LD_VAR 0 2
48893: PPUSH
48894: CALL_OW 256
48898: PUSH
48899: LD_INT 0
48901: GREATER
48902: IFFALSE 48920
// un_list = un_list ^ val ;
48904: LD_ADDR_VAR 0 4
48908: PUSH
48909: LD_VAR 0 4
48913: PUSH
48914: LD_VAR 0 2
48918: ADD
48919: ST_TO_ADDR
48920: GO 48886
48922: POP
48923: POP
// SaveCharacters ( un_list , Other_traitors_10 ) ;
48924: LD_VAR 0 4
48928: PPUSH
48929: LD_STRING Other_traitors_10
48931: PPUSH
48932: CALL_OW 38
// un_list = [ ] ;
48936: LD_ADDR_VAR 0 4
48940: PUSH
48941: EMPTY
48942: ST_TO_ADDR
// for val in original_genshers_reinforcements do
48943: LD_ADDR_VAR 0 2
48947: PUSH
48948: LD_EXP 86
48952: PUSH
48953: FOR_IN
48954: IFFALSE 48989
// if GetLives ( val ) > 0 then
48956: LD_VAR 0 2
48960: PPUSH
48961: CALL_OW 256
48965: PUSH
48966: LD_INT 0
48968: GREATER
48969: IFFALSE 48987
// un_list = un_list ^ val ;
48971: LD_ADDR_VAR 0 4
48975: PUSH
48976: LD_VAR 0 4
48980: PUSH
48981: LD_VAR 0 2
48985: ADD
48986: ST_TO_ADDR
48987: GO 48953
48989: POP
48990: POP
// SaveCharacters ( un_list , Gensher_reinforcements_10 ) ;
48991: LD_VAR 0 4
48995: PPUSH
48996: LD_STRING Gensher_reinforcements_10
48998: PPUSH
48999: CALL_OW 38
// if russian_prisoners_decision = 3 and russian_prisoners_escaped > 0 then
49003: LD_EXP 81
49007: PUSH
49008: LD_INT 3
49010: EQUAL
49011: PUSH
49012: LD_EXP 83
49016: PUSH
49017: LD_INT 0
49019: GREATER
49020: AND
49021: IFFALSE 49035
// SaveCharacters ( russian_prisoners_escaped , Released_Russian_prisoners_10 ) ;
49023: LD_EXP 83
49027: PPUSH
49028: LD_STRING Released_Russian_prisoners_10
49030: PPUSH
49031: CALL_OW 38
// YouWin ;
49035: CALL_OW 103
// end ;
49039: LD_VAR 0 1
49043: RET
