// export Game_Type ; export def_base_level , def_amount_of_people , def_skill_level , def_starting_resources , def_shipments_density , def_extra_oil_deposits , def_extra_sib_deposits , def_shared_vision , def_morale_flags , def_siberite_detection , def_people_respawning , def_amount_of_apemen , def_amount_of_siberit , def_public_score , def_siberite_bomb ; export is_depot , number_of_breastworks , number_of_people , skill_level , starting_crates , starting_resources , shipments_density , amount_of_apemen , amount_of_siberit , respawning_time_min , respawning_time_max , morale_decreasing_time , battle_flags_id ; export def_artefact_one , def_artefact_two , def_artefact_three , def_artefact_two_using ; export Side_Count , Team_Count , Player_Side , Player_Team , Side_Teams , Teams ; export Side_Positions , Side_Nations , Side_Names , Team_Names , Team_Game ; export depot_def , breastworks_def , start_def , normal_oil_deposits_locations , extra_oil_deposits_locations , normal_sib_deposits_locations , extra_sib_deposits_locations , def_max_sides , flags_def ; export commander ; var global_units , global_defined , soldiers_created ; function read_multiplayer_and_game_parameters ; var side , dep , br1 , br2 , br3 , un , i ; begin
   0: LD_INT 0
   2: PPUSH
   3: PPUSH
   4: PPUSH
   5: PPUSH
   6: PPUSH
   7: PPUSH
   8: PPUSH
   9: PPUSH
// if MultiPlayer then
  10: LD_OWVAR 4
  14: IFFALSE 88
// begin Game_Type = mp_game_type ;
  16: LD_ADDR_EXP 1
  20: PUSH
  21: LD_OWVAR 6
  25: ST_TO_ADDR
// Player_Side := mp_player_side ;
  26: LD_ADDR_EXP 36
  30: PUSH
  31: LD_OWVAR 7
  35: ST_TO_ADDR
// Player_Team := mp_player_team ;
  36: LD_ADDR_EXP 37
  40: PUSH
  41: LD_OWVAR 8
  45: ST_TO_ADDR
// Side_Positions := mp_sides_positions ;
  46: LD_ADDR_EXP 40
  50: PUSH
  51: LD_OWVAR 17
  55: ST_TO_ADDR
// Side_Teams := mp_sides_teams ;
  56: LD_ADDR_EXP 38
  60: PUSH
  61: LD_OWVAR 15
  65: ST_TO_ADDR
// Side_Nations := mp_sides_nations ;
  66: LD_ADDR_EXP 41
  70: PUSH
  71: LD_OWVAR 16
  75: ST_TO_ADDR
// Teams = mp_teams ;
  76: LD_ADDR_EXP 39
  80: PUSH
  81: LD_OWVAR 12
  85: ST_TO_ADDR
// end else
  86: GO 278
// begin Game_Type := 3 ;
  88: LD_ADDR_EXP 1
  92: PUSH
  93: LD_INT 3
  95: ST_TO_ADDR
// Player_Side := 1 ;
  96: LD_ADDR_EXP 36
 100: PUSH
 101: LD_INT 1
 103: ST_TO_ADDR
// Player_Team := 1 ;
 104: LD_ADDR_EXP 37
 108: PUSH
 109: LD_INT 1
 111: ST_TO_ADDR
// Side_Positions := [ 1 , 2 , 3 , 4 , 5 , 6 , 0 , 0 ] ;
 112: LD_ADDR_EXP 40
 116: PUSH
 117: LD_INT 1
 119: PUSH
 120: LD_INT 2
 122: PUSH
 123: LD_INT 3
 125: PUSH
 126: LD_INT 4
 128: PUSH
 129: LD_INT 5
 131: PUSH
 132: LD_INT 6
 134: PUSH
 135: LD_INT 0
 137: PUSH
 138: LD_INT 0
 140: PUSH
 141: EMPTY
 142: LIST
 143: LIST
 144: LIST
 145: LIST
 146: LIST
 147: LIST
 148: LIST
 149: LIST
 150: ST_TO_ADDR
// Side_Teams := [ 1 , 2 , 3 , 4 , 5 , 6 , 0 , 0 ] ;
 151: LD_ADDR_EXP 38
 155: PUSH
 156: LD_INT 1
 158: PUSH
 159: LD_INT 2
 161: PUSH
 162: LD_INT 3
 164: PUSH
 165: LD_INT 4
 167: PUSH
 168: LD_INT 5
 170: PUSH
 171: LD_INT 6
 173: PUSH
 174: LD_INT 0
 176: PUSH
 177: LD_INT 0
 179: PUSH
 180: EMPTY
 181: LIST
 182: LIST
 183: LIST
 184: LIST
 185: LIST
 186: LIST
 187: LIST
 188: LIST
 189: ST_TO_ADDR
// Side_Nations := [ 1 , 2 , 3 , 1 , 2 , 3 , 0 , 0 ] ;
 190: LD_ADDR_EXP 41
 194: PUSH
 195: LD_INT 1
 197: PUSH
 198: LD_INT 2
 200: PUSH
 201: LD_INT 3
 203: PUSH
 204: LD_INT 1
 206: PUSH
 207: LD_INT 2
 209: PUSH
 210: LD_INT 3
 212: PUSH
 213: LD_INT 0
 215: PUSH
 216: LD_INT 0
 218: PUSH
 219: EMPTY
 220: LIST
 221: LIST
 222: LIST
 223: LIST
 224: LIST
 225: LIST
 226: LIST
 227: LIST
 228: ST_TO_ADDR
// Teams := [ [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] , [ 5 ] , [ 6 ] ] ;
 229: LD_ADDR_EXP 39
 233: PUSH
 234: LD_INT 1
 236: PUSH
 237: EMPTY
 238: LIST
 239: PUSH
 240: LD_INT 2
 242: PUSH
 243: EMPTY
 244: LIST
 245: PUSH
 246: LD_INT 3
 248: PUSH
 249: EMPTY
 250: LIST
 251: PUSH
 252: LD_INT 4
 254: PUSH
 255: EMPTY
 256: LIST
 257: PUSH
 258: LD_INT 5
 260: PUSH
 261: EMPTY
 262: LIST
 263: PUSH
 264: LD_INT 6
 266: PUSH
 267: EMPTY
 268: LIST
 269: PUSH
 270: EMPTY
 271: LIST
 272: LIST
 273: LIST
 274: LIST
 275: LIST
 276: LIST
 277: ST_TO_ADDR
// end ; Side_Count = ( Side_Positions diff [ 0 ] ) + 0 ;
 278: LD_ADDR_EXP 34
 282: PUSH
 283: LD_EXP 40
 287: PUSH
 288: LD_INT 0
 290: PUSH
 291: EMPTY
 292: LIST
 293: DIFF
 294: PUSH
 295: LD_INT 0
 297: PLUS
 298: ST_TO_ADDR
// Team_Count = ( Side_Teams diff [ 0 ] ) + 0 ;
 299: LD_ADDR_EXP 35
 303: PUSH
 304: LD_EXP 38
 308: PUSH
 309: LD_INT 0
 311: PUSH
 312: EMPTY
 313: LIST
 314: DIFF
 315: PUSH
 316: LD_INT 0
 318: PLUS
 319: ST_TO_ADDR
// if MultiPlayer then
 320: LD_OWVAR 4
 324: IFFALSE 543
// begin def_base_level := GetMultiplayerSetting ( 0 ) ;
 326: LD_ADDR_EXP 2
 330: PUSH
 331: LD_INT 0
 333: PPUSH
 334: CALL_OW 426
 338: ST_TO_ADDR
// def_amount_of_people := GetMultiplayerSetting ( 1 ) ;
 339: LD_ADDR_EXP 3
 343: PUSH
 344: LD_INT 1
 346: PPUSH
 347: CALL_OW 426
 351: ST_TO_ADDR
// def_skill_level := GetMultiplayerSetting ( 2 ) ;
 352: LD_ADDR_EXP 4
 356: PUSH
 357: LD_INT 2
 359: PPUSH
 360: CALL_OW 426
 364: ST_TO_ADDR
// def_starting_resources := GetMultiplayerSetting ( 3 ) ;
 365: LD_ADDR_EXP 5
 369: PUSH
 370: LD_INT 3
 372: PPUSH
 373: CALL_OW 426
 377: ST_TO_ADDR
// def_shipments_density := GetMultiplayerSetting ( 4 ) ;
 378: LD_ADDR_EXP 6
 382: PUSH
 383: LD_INT 4
 385: PPUSH
 386: CALL_OW 426
 390: ST_TO_ADDR
// def_extra_oil_deposits := GetMultiplayerSetting ( 5 ) ;
 391: LD_ADDR_EXP 7
 395: PUSH
 396: LD_INT 5
 398: PPUSH
 399: CALL_OW 426
 403: ST_TO_ADDR
// def_extra_sib_deposits := GetMultiplayerSetting ( 6 ) ;
 404: LD_ADDR_EXP 8
 408: PUSH
 409: LD_INT 6
 411: PPUSH
 412: CALL_OW 426
 416: ST_TO_ADDR
// if Game_Type = 1 then
 417: LD_EXP 1
 421: PUSH
 422: LD_INT 1
 424: EQUAL
 425: IFFALSE 437
// def_shared_vision := false else
 427: LD_ADDR_EXP 9
 431: PUSH
 432: LD_INT 0
 434: ST_TO_ADDR
 435: GO 450
// def_shared_vision := GetMultiplayerSetting ( 10 ) ;
 437: LD_ADDR_EXP 9
 441: PUSH
 442: LD_INT 10
 444: PPUSH
 445: CALL_OW 426
 449: ST_TO_ADDR
// def_morale_flags := GetMultiplayerSetting ( 11 ) ;
 450: LD_ADDR_EXP 10
 454: PUSH
 455: LD_INT 11
 457: PPUSH
 458: CALL_OW 426
 462: ST_TO_ADDR
// def_siberite_detection := GetMultiplayerSetting ( 12 ) ;
 463: LD_ADDR_EXP 11
 467: PUSH
 468: LD_INT 12
 470: PPUSH
 471: CALL_OW 426
 475: ST_TO_ADDR
// def_people_respawning := GetMultiplayerSetting ( 13 ) ;
 476: LD_ADDR_EXP 12
 480: PUSH
 481: LD_INT 13
 483: PPUSH
 484: CALL_OW 426
 488: ST_TO_ADDR
// def_amount_of_apemen := GetMultiplayerSetting ( 14 ) ;
 489: LD_ADDR_EXP 13
 493: PUSH
 494: LD_INT 14
 496: PPUSH
 497: CALL_OW 426
 501: ST_TO_ADDR
// def_amount_of_siberit := GetMultiplayerSetting ( 15 ) ;
 502: LD_ADDR_EXP 14
 506: PUSH
 507: LD_INT 15
 509: PPUSH
 510: CALL_OW 426
 514: ST_TO_ADDR
// def_public_score := GetMultiplayerSetting ( 16 ) ;
 515: LD_ADDR_EXP 15
 519: PUSH
 520: LD_INT 16
 522: PPUSH
 523: CALL_OW 426
 527: ST_TO_ADDR
// def_siberite_bomb := GetMultiplayerSetting ( 17 ) ;
 528: LD_ADDR_EXP 16
 532: PUSH
 533: LD_INT 17
 535: PPUSH
 536: CALL_OW 426
 540: ST_TO_ADDR
// end else
 541: GO 667
// begin randomize ;
 543: CALL_OW 10
// def_base_level := 2 ;
 547: LD_ADDR_EXP 2
 551: PUSH
 552: LD_INT 2
 554: ST_TO_ADDR
// def_amount_of_people := 0 ;
 555: LD_ADDR_EXP 3
 559: PUSH
 560: LD_INT 0
 562: ST_TO_ADDR
// def_skill_level := 1 ;
 563: LD_ADDR_EXP 4
 567: PUSH
 568: LD_INT 1
 570: ST_TO_ADDR
// def_starting_resources := 2 ;
 571: LD_ADDR_EXP 5
 575: PUSH
 576: LD_INT 2
 578: ST_TO_ADDR
// def_shipments_density := 1 ;
 579: LD_ADDR_EXP 6
 583: PUSH
 584: LD_INT 1
 586: ST_TO_ADDR
// def_extra_oil_deposits := 1 ;
 587: LD_ADDR_EXP 7
 591: PUSH
 592: LD_INT 1
 594: ST_TO_ADDR
// def_extra_sib_deposits := 2 ;
 595: LD_ADDR_EXP 8
 599: PUSH
 600: LD_INT 2
 602: ST_TO_ADDR
// def_shared_vision := 1 ;
 603: LD_ADDR_EXP 9
 607: PUSH
 608: LD_INT 1
 610: ST_TO_ADDR
// def_morale_flags := 1 ;
 611: LD_ADDR_EXP 10
 615: PUSH
 616: LD_INT 1
 618: ST_TO_ADDR
// def_siberite_detection := 0 ;
 619: LD_ADDR_EXP 11
 623: PUSH
 624: LD_INT 0
 626: ST_TO_ADDR
// def_people_respawning := 2 ;
 627: LD_ADDR_EXP 12
 631: PUSH
 632: LD_INT 2
 634: ST_TO_ADDR
// def_amount_of_apemen := 3 ;
 635: LD_ADDR_EXP 13
 639: PUSH
 640: LD_INT 3
 642: ST_TO_ADDR
// def_amount_of_siberit := 0 ;
 643: LD_ADDR_EXP 14
 647: PUSH
 648: LD_INT 0
 650: ST_TO_ADDR
// def_public_score := 1 ;
 651: LD_ADDR_EXP 15
 655: PUSH
 656: LD_INT 1
 658: ST_TO_ADDR
// def_siberite_bomb := 0 ;
 659: LD_ADDR_EXP 16
 663: PUSH
 664: LD_INT 0
 666: ST_TO_ADDR
// end ; is_depot := [ 0 , 1 , 1 ] [ def_base_level + 1 ] ;
 667: LD_ADDR_EXP 17
 671: PUSH
 672: LD_INT 0
 674: PUSH
 675: LD_INT 1
 677: PUSH
 678: LD_INT 1
 680: PUSH
 681: EMPTY
 682: LIST
 683: LIST
 684: LIST
 685: PUSH
 686: LD_EXP 2
 690: PUSH
 691: LD_INT 1
 693: PLUS
 694: ARRAY
 695: ST_TO_ADDR
// number_of_breastworks := [ 0 , 0 , 2 ] [ def_base_level + 1 ] ;
 696: LD_ADDR_EXP 18
 700: PUSH
 701: LD_INT 0
 703: PUSH
 704: LD_INT 0
 706: PUSH
 707: LD_INT 2
 709: PUSH
 710: EMPTY
 711: LIST
 712: LIST
 713: LIST
 714: PUSH
 715: LD_EXP 2
 719: PUSH
 720: LD_INT 1
 722: PLUS
 723: ARRAY
 724: ST_TO_ADDR
// number_of_people := [ 6 , 9 , 12 , 15 ] [ def_amount_of_people + 1 ] ;
 725: LD_ADDR_EXP 19
 729: PUSH
 730: LD_INT 6
 732: PUSH
 733: LD_INT 9
 735: PUSH
 736: LD_INT 12
 738: PUSH
 739: LD_INT 15
 741: PUSH
 742: EMPTY
 743: LIST
 744: LIST
 745: LIST
 746: LIST
 747: PUSH
 748: LD_EXP 3
 752: PUSH
 753: LD_INT 1
 755: PLUS
 756: ARRAY
 757: ST_TO_ADDR
// skill_level := [ 2 , 3 , 4 , 5 ] [ def_skill_level + 1 ] ;
 758: LD_ADDR_EXP 20
 762: PUSH
 763: LD_INT 2
 765: PUSH
 766: LD_INT 3
 768: PUSH
 769: LD_INT 4
 771: PUSH
 772: LD_INT 5
 774: PUSH
 775: EMPTY
 776: LIST
 777: LIST
 778: LIST
 779: LIST
 780: PUSH
 781: LD_EXP 4
 785: PUSH
 786: LD_INT 1
 788: PLUS
 789: ARRAY
 790: ST_TO_ADDR
// starting_resources := [ [ 0 , 0 , 0 ] , [ 30 , 0 , 0 ] , [ 50 , 20 , 0 ] , [ 80 , 40 , 20 ] ] [ def_starting_resources + 1 ] ;
 791: LD_ADDR_EXP 22
 795: PUSH
 796: LD_INT 0
 798: PUSH
 799: LD_INT 0
 801: PUSH
 802: LD_INT 0
 804: PUSH
 805: EMPTY
 806: LIST
 807: LIST
 808: LIST
 809: PUSH
 810: LD_INT 30
 812: PUSH
 813: LD_INT 0
 815: PUSH
 816: LD_INT 0
 818: PUSH
 819: EMPTY
 820: LIST
 821: LIST
 822: LIST
 823: PUSH
 824: LD_INT 50
 826: PUSH
 827: LD_INT 20
 829: PUSH
 830: LD_INT 0
 832: PUSH
 833: EMPTY
 834: LIST
 835: LIST
 836: LIST
 837: PUSH
 838: LD_INT 80
 840: PUSH
 841: LD_INT 40
 843: PUSH
 844: LD_INT 20
 846: PUSH
 847: EMPTY
 848: LIST
 849: LIST
 850: LIST
 851: PUSH
 852: EMPTY
 853: LIST
 854: LIST
 855: LIST
 856: LIST
 857: PUSH
 858: LD_EXP 5
 862: PUSH
 863: LD_INT 1
 865: PLUS
 866: ARRAY
 867: ST_TO_ADDR
// starting_crates := [ [ 10 ] , [ 7 , 14 ] , [ 6 , 12 , 18 ] , [ 5 , 10 , 15 , 20 ] ] [ def_starting_resources + 1 ] ;
 868: LD_ADDR_EXP 21
 872: PUSH
 873: LD_INT 10
 875: PUSH
 876: EMPTY
 877: LIST
 878: PUSH
 879: LD_INT 7
 881: PUSH
 882: LD_INT 14
 884: PUSH
 885: EMPTY
 886: LIST
 887: LIST
 888: PUSH
 889: LD_INT 6
 891: PUSH
 892: LD_INT 12
 894: PUSH
 895: LD_INT 18
 897: PUSH
 898: EMPTY
 899: LIST
 900: LIST
 901: LIST
 902: PUSH
 903: LD_INT 5
 905: PUSH
 906: LD_INT 10
 908: PUSH
 909: LD_INT 15
 911: PUSH
 912: LD_INT 20
 914: PUSH
 915: EMPTY
 916: LIST
 917: LIST
 918: LIST
 919: LIST
 920: PUSH
 921: EMPTY
 922: LIST
 923: LIST
 924: LIST
 925: LIST
 926: PUSH
 927: LD_EXP 5
 931: PUSH
 932: LD_INT 1
 934: PLUS
 935: ARRAY
 936: ST_TO_ADDR
// shipments_density := [ 150 , 125 , 100 ] [ def_shipments_density + 1 ] ;
 937: LD_ADDR_EXP 23
 941: PUSH
 942: LD_INT 150
 944: PUSH
 945: LD_INT 125
 947: PUSH
 948: LD_INT 100
 950: PUSH
 951: EMPTY
 952: LIST
 953: LIST
 954: LIST
 955: PUSH
 956: LD_EXP 6
 960: PUSH
 961: LD_INT 1
 963: PLUS
 964: ARRAY
 965: ST_TO_ADDR
// respawning_time_min := [ 0 0$0 , 5 5$00 , 3 3$0 ] [ def_people_respawning + 1 ] ;
 966: LD_ADDR_EXP 26
 970: PUSH
 971: LD_INT 0
 973: PUSH
 974: LD_INT 10500
 976: PUSH
 977: LD_INT 6300
 979: PUSH
 980: EMPTY
 981: LIST
 982: LIST
 983: LIST
 984: PUSH
 985: LD_EXP 12
 989: PUSH
 990: LD_INT 1
 992: PLUS
 993: ARRAY
 994: ST_TO_ADDR
// respawning_time_max := [ 0 0$0 , 15 15$00 , 5 5$0 ] [ def_people_respawning + 1 ] ;
 995: LD_ADDR_EXP 27
 999: PUSH
1000: LD_INT 0
1002: PUSH
1003: LD_INT 31500
1005: PUSH
1006: LD_INT 10500
1008: PUSH
1009: EMPTY
1010: LIST
1011: LIST
1012: LIST
1013: PUSH
1014: LD_EXP 12
1018: PUSH
1019: LD_INT 1
1021: PLUS
1022: ARRAY
1023: ST_TO_ADDR
// amount_of_apemen := [ 0 , 3 , 6 , 9 ] [ def_amount_of_apemen + 1 ] ;
1024: LD_ADDR_EXP 24
1028: PUSH
1029: LD_INT 0
1031: PUSH
1032: LD_INT 3
1034: PUSH
1035: LD_INT 6
1037: PUSH
1038: LD_INT 9
1040: PUSH
1041: EMPTY
1042: LIST
1043: LIST
1044: LIST
1045: LIST
1046: PUSH
1047: LD_EXP 13
1051: PUSH
1052: LD_INT 1
1054: PLUS
1055: ARRAY
1056: ST_TO_ADDR
// amount_of_siberit := [ 30 , 50 , 80 , 100 , 130 , 150 , 200 ] [ def_amount_of_siberit + 1 ] ;
1057: LD_ADDR_EXP 25
1061: PUSH
1062: LD_INT 30
1064: PUSH
1065: LD_INT 50
1067: PUSH
1068: LD_INT 80
1070: PUSH
1071: LD_INT 100
1073: PUSH
1074: LD_INT 130
1076: PUSH
1077: LD_INT 150
1079: PUSH
1080: LD_INT 200
1082: PUSH
1083: EMPTY
1084: LIST
1085: LIST
1086: LIST
1087: LIST
1088: LIST
1089: LIST
1090: LIST
1091: PUSH
1092: LD_EXP 14
1096: PUSH
1097: LD_INT 1
1099: PLUS
1100: ARRAY
1101: ST_TO_ADDR
// morale_decreasing_time = [ - 1 , 0 0$10 , 0 0$20 , 0 0$40 , 0 0$0 ] [ def_morale_flags + 1 ] ;
1102: LD_ADDR_EXP 28
1106: PUSH
1107: LD_INT 1
1109: NEG
1110: PUSH
1111: LD_INT 350
1113: PUSH
1114: LD_INT 700
1116: PUSH
1117: LD_INT 1400
1119: PUSH
1120: LD_INT 0
1122: PUSH
1123: EMPTY
1124: LIST
1125: LIST
1126: LIST
1127: LIST
1128: LIST
1129: PUSH
1130: LD_EXP 10
1134: PUSH
1135: LD_INT 1
1137: PLUS
1138: ARRAY
1139: ST_TO_ADDR
// battle_flags_id = [ ] ;
1140: LD_ADDR_EXP 29
1144: PUSH
1145: EMPTY
1146: ST_TO_ADDR
// end ;
1147: LD_VAR 0 1
1151: RET
// function init_map ; var i , j ; begin
1152: LD_INT 0
1154: PPUSH
1155: PPUSH
1156: PPUSH
// normal_oil_deposits_locations := [ [ 28 , 22 ] , [ 69 , 3 ] , [ 138 , 23 ] , [ 180 , 106 ] , [ 140 , 137 ] , [ 76 , 115 ] ] ;
1157: LD_ADDR_EXP 48
1161: PUSH
1162: LD_INT 28
1164: PUSH
1165: LD_INT 22
1167: PUSH
1168: EMPTY
1169: LIST
1170: LIST
1171: PUSH
1172: LD_INT 69
1174: PUSH
1175: LD_INT 3
1177: PUSH
1178: EMPTY
1179: LIST
1180: LIST
1181: PUSH
1182: LD_INT 138
1184: PUSH
1185: LD_INT 23
1187: PUSH
1188: EMPTY
1189: LIST
1190: LIST
1191: PUSH
1192: LD_INT 180
1194: PUSH
1195: LD_INT 106
1197: PUSH
1198: EMPTY
1199: LIST
1200: LIST
1201: PUSH
1202: LD_INT 140
1204: PUSH
1205: LD_INT 137
1207: PUSH
1208: EMPTY
1209: LIST
1210: LIST
1211: PUSH
1212: LD_INT 76
1214: PUSH
1215: LD_INT 115
1217: PUSH
1218: EMPTY
1219: LIST
1220: LIST
1221: PUSH
1222: EMPTY
1223: LIST
1224: LIST
1225: LIST
1226: LIST
1227: LIST
1228: LIST
1229: ST_TO_ADDR
// extra_oil_deposits_locations := [ [ [ 31 , 38 ] , [ 34 , 20 ] ] , [ [ 58 , 4 ] , [ 82 , 4 ] ] , [ [ 122 , 17 ] , [ 152 , 43 ] ] , [ [ 174 , 90 ] , [ 180 , 120 ] ] , [ [ 152 , 136 ] , [ 130 , 136 ] ] , [ [ 89 , 116 ] , [ 59 , 89 ] ] ] ;
1230: LD_ADDR_EXP 49
1234: PUSH
1235: LD_INT 31
1237: PUSH
1238: LD_INT 38
1240: PUSH
1241: EMPTY
1242: LIST
1243: LIST
1244: PUSH
1245: LD_INT 34
1247: PUSH
1248: LD_INT 20
1250: PUSH
1251: EMPTY
1252: LIST
1253: LIST
1254: PUSH
1255: EMPTY
1256: LIST
1257: LIST
1258: PUSH
1259: LD_INT 58
1261: PUSH
1262: LD_INT 4
1264: PUSH
1265: EMPTY
1266: LIST
1267: LIST
1268: PUSH
1269: LD_INT 82
1271: PUSH
1272: LD_INT 4
1274: PUSH
1275: EMPTY
1276: LIST
1277: LIST
1278: PUSH
1279: EMPTY
1280: LIST
1281: LIST
1282: PUSH
1283: LD_INT 122
1285: PUSH
1286: LD_INT 17
1288: PUSH
1289: EMPTY
1290: LIST
1291: LIST
1292: PUSH
1293: LD_INT 152
1295: PUSH
1296: LD_INT 43
1298: PUSH
1299: EMPTY
1300: LIST
1301: LIST
1302: PUSH
1303: EMPTY
1304: LIST
1305: LIST
1306: PUSH
1307: LD_INT 174
1309: PUSH
1310: LD_INT 90
1312: PUSH
1313: EMPTY
1314: LIST
1315: LIST
1316: PUSH
1317: LD_INT 180
1319: PUSH
1320: LD_INT 120
1322: PUSH
1323: EMPTY
1324: LIST
1325: LIST
1326: PUSH
1327: EMPTY
1328: LIST
1329: LIST
1330: PUSH
1331: LD_INT 152
1333: PUSH
1334: LD_INT 136
1336: PUSH
1337: EMPTY
1338: LIST
1339: LIST
1340: PUSH
1341: LD_INT 130
1343: PUSH
1344: LD_INT 136
1346: PUSH
1347: EMPTY
1348: LIST
1349: LIST
1350: PUSH
1351: EMPTY
1352: LIST
1353: LIST
1354: PUSH
1355: LD_INT 89
1357: PUSH
1358: LD_INT 116
1360: PUSH
1361: EMPTY
1362: LIST
1363: LIST
1364: PUSH
1365: LD_INT 59
1367: PUSH
1368: LD_INT 89
1370: PUSH
1371: EMPTY
1372: LIST
1373: LIST
1374: PUSH
1375: EMPTY
1376: LIST
1377: LIST
1378: PUSH
1379: EMPTY
1380: LIST
1381: LIST
1382: LIST
1383: LIST
1384: LIST
1385: LIST
1386: ST_TO_ADDR
// normal_sib_deposits_locations := [ [ 28 , 26 ] , [ 73 , 3 ] , [ 134 , 21 ] , [ 184 , 111 ] , [ 144 , 137 ] , [ 72 , 112 ] ] ;
1387: LD_ADDR_EXP 50
1391: PUSH
1392: LD_INT 28
1394: PUSH
1395: LD_INT 26
1397: PUSH
1398: EMPTY
1399: LIST
1400: LIST
1401: PUSH
1402: LD_INT 73
1404: PUSH
1405: LD_INT 3
1407: PUSH
1408: EMPTY
1409: LIST
1410: LIST
1411: PUSH
1412: LD_INT 134
1414: PUSH
1415: LD_INT 21
1417: PUSH
1418: EMPTY
1419: LIST
1420: LIST
1421: PUSH
1422: LD_INT 184
1424: PUSH
1425: LD_INT 111
1427: PUSH
1428: EMPTY
1429: LIST
1430: LIST
1431: PUSH
1432: LD_INT 144
1434: PUSH
1435: LD_INT 137
1437: PUSH
1438: EMPTY
1439: LIST
1440: LIST
1441: PUSH
1442: LD_INT 72
1444: PUSH
1445: LD_INT 112
1447: PUSH
1448: EMPTY
1449: LIST
1450: LIST
1451: PUSH
1452: EMPTY
1453: LIST
1454: LIST
1455: LIST
1456: LIST
1457: LIST
1458: LIST
1459: ST_TO_ADDR
// extra_sib_deposits_locations := [ [ [ 27 , 39 ] , [ 28 , 16 ] ] , [ [ 57 , 8 ] , [ 87 , 8 ] ] , [ [ 127 , 17 ] , [ 146 , 36 ] ] , [ [ 176 , 121 ] , [ 180 , 95 ] ] , [ [ 153 , 132 ] , [ 124 , 133 ] ] , [ [ 85 , 117 ] , [ 56 , 91 ] ] ] ;
1460: LD_ADDR_EXP 51
1464: PUSH
1465: LD_INT 27
1467: PUSH
1468: LD_INT 39
1470: PUSH
1471: EMPTY
1472: LIST
1473: LIST
1474: PUSH
1475: LD_INT 28
1477: PUSH
1478: LD_INT 16
1480: PUSH
1481: EMPTY
1482: LIST
1483: LIST
1484: PUSH
1485: EMPTY
1486: LIST
1487: LIST
1488: PUSH
1489: LD_INT 57
1491: PUSH
1492: LD_INT 8
1494: PUSH
1495: EMPTY
1496: LIST
1497: LIST
1498: PUSH
1499: LD_INT 87
1501: PUSH
1502: LD_INT 8
1504: PUSH
1505: EMPTY
1506: LIST
1507: LIST
1508: PUSH
1509: EMPTY
1510: LIST
1511: LIST
1512: PUSH
1513: LD_INT 127
1515: PUSH
1516: LD_INT 17
1518: PUSH
1519: EMPTY
1520: LIST
1521: LIST
1522: PUSH
1523: LD_INT 146
1525: PUSH
1526: LD_INT 36
1528: PUSH
1529: EMPTY
1530: LIST
1531: LIST
1532: PUSH
1533: EMPTY
1534: LIST
1535: LIST
1536: PUSH
1537: LD_INT 176
1539: PUSH
1540: LD_INT 121
1542: PUSH
1543: EMPTY
1544: LIST
1545: LIST
1546: PUSH
1547: LD_INT 180
1549: PUSH
1550: LD_INT 95
1552: PUSH
1553: EMPTY
1554: LIST
1555: LIST
1556: PUSH
1557: EMPTY
1558: LIST
1559: LIST
1560: PUSH
1561: LD_INT 153
1563: PUSH
1564: LD_INT 132
1566: PUSH
1567: EMPTY
1568: LIST
1569: LIST
1570: PUSH
1571: LD_INT 124
1573: PUSH
1574: LD_INT 133
1576: PUSH
1577: EMPTY
1578: LIST
1579: LIST
1580: PUSH
1581: EMPTY
1582: LIST
1583: LIST
1584: PUSH
1585: LD_INT 85
1587: PUSH
1588: LD_INT 117
1590: PUSH
1591: EMPTY
1592: LIST
1593: LIST
1594: PUSH
1595: LD_INT 56
1597: PUSH
1598: LD_INT 91
1600: PUSH
1601: EMPTY
1602: LIST
1603: LIST
1604: PUSH
1605: EMPTY
1606: LIST
1607: LIST
1608: PUSH
1609: EMPTY
1610: LIST
1611: LIST
1612: LIST
1613: LIST
1614: LIST
1615: LIST
1616: ST_TO_ADDR
// depot_def := [ [ 53 , 42 , 5 ] , [ 77 , 17 , 0 ] , [ 129 , 43 , 1 ] , [ 155 , 96 , 2 ] , [ 130 , 120 , 3 ] , [ 82 , 98 , 3 ] ] ;
1617: LD_ADDR_EXP 45
1621: PUSH
1622: LD_INT 53
1624: PUSH
1625: LD_INT 42
1627: PUSH
1628: LD_INT 5
1630: PUSH
1631: EMPTY
1632: LIST
1633: LIST
1634: LIST
1635: PUSH
1636: LD_INT 77
1638: PUSH
1639: LD_INT 17
1641: PUSH
1642: LD_INT 0
1644: PUSH
1645: EMPTY
1646: LIST
1647: LIST
1648: LIST
1649: PUSH
1650: LD_INT 129
1652: PUSH
1653: LD_INT 43
1655: PUSH
1656: LD_INT 1
1658: PUSH
1659: EMPTY
1660: LIST
1661: LIST
1662: LIST
1663: PUSH
1664: LD_INT 155
1666: PUSH
1667: LD_INT 96
1669: PUSH
1670: LD_INT 2
1672: PUSH
1673: EMPTY
1674: LIST
1675: LIST
1676: LIST
1677: PUSH
1678: LD_INT 130
1680: PUSH
1681: LD_INT 120
1683: PUSH
1684: LD_INT 3
1686: PUSH
1687: EMPTY
1688: LIST
1689: LIST
1690: LIST
1691: PUSH
1692: LD_INT 82
1694: PUSH
1695: LD_INT 98
1697: PUSH
1698: LD_INT 3
1700: PUSH
1701: EMPTY
1702: LIST
1703: LIST
1704: LIST
1705: PUSH
1706: EMPTY
1707: LIST
1708: LIST
1709: LIST
1710: LIST
1711: LIST
1712: LIST
1713: ST_TO_ADDR
// start_def := [ [ 42 , 35 ] , [ 74 , 9 ] , [ 135 , 35 ] , [ 167 , 102 ] , [ 137 , 132 ] , [ 77 , 105 ] ] ;
1714: LD_ADDR_EXP 47
1718: PUSH
1719: LD_INT 42
1721: PUSH
1722: LD_INT 35
1724: PUSH
1725: EMPTY
1726: LIST
1727: LIST
1728: PUSH
1729: LD_INT 74
1731: PUSH
1732: LD_INT 9
1734: PUSH
1735: EMPTY
1736: LIST
1737: LIST
1738: PUSH
1739: LD_INT 135
1741: PUSH
1742: LD_INT 35
1744: PUSH
1745: EMPTY
1746: LIST
1747: LIST
1748: PUSH
1749: LD_INT 167
1751: PUSH
1752: LD_INT 102
1754: PUSH
1755: EMPTY
1756: LIST
1757: LIST
1758: PUSH
1759: LD_INT 137
1761: PUSH
1762: LD_INT 132
1764: PUSH
1765: EMPTY
1766: LIST
1767: LIST
1768: PUSH
1769: LD_INT 77
1771: PUSH
1772: LD_INT 105
1774: PUSH
1775: EMPTY
1776: LIST
1777: LIST
1778: PUSH
1779: EMPTY
1780: LIST
1781: LIST
1782: LIST
1783: LIST
1784: LIST
1785: LIST
1786: ST_TO_ADDR
// flags_def := [ [ 57 , 45 ] , [ 80 , 22 ] , [ 125 , 44 ] , [ 150 , 92 ] , [ 128 , 115 ] , [ 83 , 94 ] ] ;
1787: LD_ADDR_EXP 53
1791: PUSH
1792: LD_INT 57
1794: PUSH
1795: LD_INT 45
1797: PUSH
1798: EMPTY
1799: LIST
1800: LIST
1801: PUSH
1802: LD_INT 80
1804: PUSH
1805: LD_INT 22
1807: PUSH
1808: EMPTY
1809: LIST
1810: LIST
1811: PUSH
1812: LD_INT 125
1814: PUSH
1815: LD_INT 44
1817: PUSH
1818: EMPTY
1819: LIST
1820: LIST
1821: PUSH
1822: LD_INT 150
1824: PUSH
1825: LD_INT 92
1827: PUSH
1828: EMPTY
1829: LIST
1830: LIST
1831: PUSH
1832: LD_INT 128
1834: PUSH
1835: LD_INT 115
1837: PUSH
1838: EMPTY
1839: LIST
1840: LIST
1841: PUSH
1842: LD_INT 83
1844: PUSH
1845: LD_INT 94
1847: PUSH
1848: EMPTY
1849: LIST
1850: LIST
1851: PUSH
1852: EMPTY
1853: LIST
1854: LIST
1855: LIST
1856: LIST
1857: LIST
1858: LIST
1859: ST_TO_ADDR
// breastworks_def := [ [ [ 65 , 53 , 5 ] , [ 65 , 40 , 4 ] ] , [ [ 76 , 28 , 0 ] , [ 89 , 28 , 5 ] ] , [ [ 115 , 41 , 1 ] , [ 128 , 54 , 0 ] ] , [ [ 143 , 82 , 2 ] , [ 143 , 95 , 1 ] ] , [ [ 131 , 108 , 3 ] , [ 118 , 108 , 2 ] ] , [ [ 80 , 85 , 3 ] , [ 92 , 97 , 4 ] ] ] ;
1860: LD_ADDR_EXP 46
1864: PUSH
1865: LD_INT 65
1867: PUSH
1868: LD_INT 53
1870: PUSH
1871: LD_INT 5
1873: PUSH
1874: EMPTY
1875: LIST
1876: LIST
1877: LIST
1878: PUSH
1879: LD_INT 65
1881: PUSH
1882: LD_INT 40
1884: PUSH
1885: LD_INT 4
1887: PUSH
1888: EMPTY
1889: LIST
1890: LIST
1891: LIST
1892: PUSH
1893: EMPTY
1894: LIST
1895: LIST
1896: PUSH
1897: LD_INT 76
1899: PUSH
1900: LD_INT 28
1902: PUSH
1903: LD_INT 0
1905: PUSH
1906: EMPTY
1907: LIST
1908: LIST
1909: LIST
1910: PUSH
1911: LD_INT 89
1913: PUSH
1914: LD_INT 28
1916: PUSH
1917: LD_INT 5
1919: PUSH
1920: EMPTY
1921: LIST
1922: LIST
1923: LIST
1924: PUSH
1925: EMPTY
1926: LIST
1927: LIST
1928: PUSH
1929: LD_INT 115
1931: PUSH
1932: LD_INT 41
1934: PUSH
1935: LD_INT 1
1937: PUSH
1938: EMPTY
1939: LIST
1940: LIST
1941: LIST
1942: PUSH
1943: LD_INT 128
1945: PUSH
1946: LD_INT 54
1948: PUSH
1949: LD_INT 0
1951: PUSH
1952: EMPTY
1953: LIST
1954: LIST
1955: LIST
1956: PUSH
1957: EMPTY
1958: LIST
1959: LIST
1960: PUSH
1961: LD_INT 143
1963: PUSH
1964: LD_INT 82
1966: PUSH
1967: LD_INT 2
1969: PUSH
1970: EMPTY
1971: LIST
1972: LIST
1973: LIST
1974: PUSH
1975: LD_INT 143
1977: PUSH
1978: LD_INT 95
1980: PUSH
1981: LD_INT 1
1983: PUSH
1984: EMPTY
1985: LIST
1986: LIST
1987: LIST
1988: PUSH
1989: EMPTY
1990: LIST
1991: LIST
1992: PUSH
1993: LD_INT 131
1995: PUSH
1996: LD_INT 108
1998: PUSH
1999: LD_INT 3
2001: PUSH
2002: EMPTY
2003: LIST
2004: LIST
2005: LIST
2006: PUSH
2007: LD_INT 118
2009: PUSH
2010: LD_INT 108
2012: PUSH
2013: LD_INT 2
2015: PUSH
2016: EMPTY
2017: LIST
2018: LIST
2019: LIST
2020: PUSH
2021: EMPTY
2022: LIST
2023: LIST
2024: PUSH
2025: LD_INT 80
2027: PUSH
2028: LD_INT 85
2030: PUSH
2031: LD_INT 3
2033: PUSH
2034: EMPTY
2035: LIST
2036: LIST
2037: LIST
2038: PUSH
2039: LD_INT 92
2041: PUSH
2042: LD_INT 97
2044: PUSH
2045: LD_INT 4
2047: PUSH
2048: EMPTY
2049: LIST
2050: LIST
2051: LIST
2052: PUSH
2053: EMPTY
2054: LIST
2055: LIST
2056: PUSH
2057: EMPTY
2058: LIST
2059: LIST
2060: LIST
2061: LIST
2062: LIST
2063: LIST
2064: ST_TO_ADDR
// for i in ( Side_Positions diff [ 0 ] ) do
2065: LD_ADDR_VAR 0 2
2069: PUSH
2070: LD_EXP 40
2074: PUSH
2075: LD_INT 0
2077: PUSH
2078: EMPTY
2079: LIST
2080: DIFF
2081: PUSH
2082: FOR_IN
2083: IFFALSE 2180
// if def_extra_oil_deposits then
2085: LD_EXP 7
2089: IFFALSE 2141
// for j in extra_oil_deposits_locations [ i ] do
2091: LD_ADDR_VAR 0 3
2095: PUSH
2096: LD_EXP 49
2100: PUSH
2101: LD_VAR 0 2
2105: ARRAY
2106: PUSH
2107: FOR_IN
2108: IFFALSE 2137
// CreateDepositXY ( j [ 1 ] , j [ 2 ] , mat_oil ) else
2110: LD_VAR 0 3
2114: PUSH
2115: LD_INT 1
2117: ARRAY
2118: PPUSH
2119: LD_VAR 0 3
2123: PUSH
2124: LD_INT 2
2126: ARRAY
2127: PPUSH
2128: LD_INT 2
2130: PPUSH
2131: CALL_OW 62
2135: GO 2107
2137: POP
2138: POP
2139: GO 2178
// CreateDepositXY ( normal_oil_deposits_locations [ i ] [ 1 ] , normal_oil_deposits_locations [ i ] [ 2 ] , mat_oil ) ;
2141: LD_EXP 48
2145: PUSH
2146: LD_VAR 0 2
2150: ARRAY
2151: PUSH
2152: LD_INT 1
2154: ARRAY
2155: PPUSH
2156: LD_EXP 48
2160: PUSH
2161: LD_VAR 0 2
2165: ARRAY
2166: PUSH
2167: LD_INT 2
2169: ARRAY
2170: PPUSH
2171: LD_INT 2
2173: PPUSH
2174: CALL_OW 62
2178: GO 2082
2180: POP
2181: POP
// if def_extra_sib_deposits then
2182: LD_EXP 8
2186: IFFALSE 2309
// for i in ( Side_Positions diff [ 0 ] ) do
2188: LD_ADDR_VAR 0 2
2192: PUSH
2193: LD_EXP 40
2197: PUSH
2198: LD_INT 0
2200: PUSH
2201: EMPTY
2202: LIST
2203: DIFF
2204: PUSH
2205: FOR_IN
2206: IFFALSE 2307
// if def_extra_sib_deposits = 2 then
2208: LD_EXP 8
2212: PUSH
2213: LD_INT 2
2215: EQUAL
2216: IFFALSE 2268
// for j in extra_sib_deposits_locations [ i ] do
2218: LD_ADDR_VAR 0 3
2222: PUSH
2223: LD_EXP 51
2227: PUSH
2228: LD_VAR 0 2
2232: ARRAY
2233: PUSH
2234: FOR_IN
2235: IFFALSE 2264
// CreateDepositXY ( j [ 1 ] , j [ 2 ] , mat_siberit ) else
2237: LD_VAR 0 3
2241: PUSH
2242: LD_INT 1
2244: ARRAY
2245: PPUSH
2246: LD_VAR 0 3
2250: PUSH
2251: LD_INT 2
2253: ARRAY
2254: PPUSH
2255: LD_INT 3
2257: PPUSH
2258: CALL_OW 62
2262: GO 2234
2264: POP
2265: POP
2266: GO 2305
// CreateDepositXY ( normal_sib_deposits_locations [ i ] [ 1 ] , normal_sib_deposits_locations [ i ] [ 2 ] , mat_siberit ) ;
2268: LD_EXP 50
2272: PUSH
2273: LD_VAR 0 2
2277: ARRAY
2278: PUSH
2279: LD_INT 1
2281: ARRAY
2282: PPUSH
2283: LD_EXP 50
2287: PUSH
2288: LD_VAR 0 2
2292: ARRAY
2293: PUSH
2294: LD_INT 2
2296: ARRAY
2297: PPUSH
2298: LD_INT 3
2300: PPUSH
2301: CALL_OW 62
2305: GO 2205
2307: POP
2308: POP
// end ;
2309: LD_VAR 0 1
2313: RET
// function set_shared_visions_and_alliances ; var i , j ; begin
2314: LD_INT 0
2316: PPUSH
2317: PPUSH
2318: PPUSH
// Team_Game := 0 ;
2319: LD_ADDR_EXP 44
2323: PUSH
2324: LD_INT 0
2326: ST_TO_ADDR
// for i = 1 to 8 do
2327: LD_ADDR_VAR 0 2
2331: PUSH
2332: DOUBLE
2333: LD_INT 1
2335: DEC
2336: ST_TO_ADDR
2337: LD_INT 8
2339: PUSH
2340: FOR_TO
2341: IFFALSE 2367
// Team_Game := Team_Game + Side_Teams [ i ] ;
2343: LD_ADDR_EXP 44
2347: PUSH
2348: LD_EXP 44
2352: PUSH
2353: LD_EXP 38
2357: PUSH
2358: LD_VAR 0 2
2362: ARRAY
2363: PLUS
2364: ST_TO_ADDR
2365: GO 2340
2367: POP
2368: POP
// if not Team_Game then
2369: LD_EXP 44
2373: NOT
2374: IFFALSE 2386
// Team_Game := false else
2376: LD_ADDR_EXP 44
2380: PUSH
2381: LD_INT 0
2383: ST_TO_ADDR
2384: GO 2394
// Team_Game := true ;
2386: LD_ADDR_EXP 44
2390: PUSH
2391: LD_INT 1
2393: ST_TO_ADDR
// if not Team_Game then
2394: LD_EXP 44
2398: NOT
2399: IFFALSE 2497
// begin for i = 1 to 8 do
2401: LD_ADDR_VAR 0 2
2405: PUSH
2406: DOUBLE
2407: LD_INT 1
2409: DEC
2410: ST_TO_ADDR
2411: LD_INT 8
2413: PUSH
2414: FOR_TO
2415: IFFALSE 2493
// for j = 1 to 8 do
2417: LD_ADDR_VAR 0 3
2421: PUSH
2422: DOUBLE
2423: LD_INT 1
2425: DEC
2426: ST_TO_ADDR
2427: LD_INT 8
2429: PUSH
2430: FOR_TO
2431: IFFALSE 2489
// if i <> j then
2433: LD_VAR 0 2
2437: PUSH
2438: LD_VAR 0 3
2442: NONEQUAL
2443: IFFALSE 2467
// SetAttitude ( i , j , att_neutral , true ) else
2445: LD_VAR 0 2
2449: PPUSH
2450: LD_VAR 0 3
2454: PPUSH
2455: LD_INT 0
2457: PPUSH
2458: LD_INT 1
2460: PPUSH
2461: CALL_OW 80
2465: GO 2487
// SetAttitude ( i , j , att_friend , true ) ;
2467: LD_VAR 0 2
2471: PPUSH
2472: LD_VAR 0 3
2476: PPUSH
2477: LD_INT 1
2479: PPUSH
2480: LD_INT 1
2482: PPUSH
2483: CALL_OW 80
2487: GO 2430
2489: POP
2490: POP
2491: GO 2414
2493: POP
2494: POP
// end else
2495: GO 2672
// begin if def_shared_vision then
2497: LD_EXP 9
2501: IFFALSE 2566
// begin for i in Teams do
2503: LD_ADDR_VAR 0 2
2507: PUSH
2508: LD_EXP 39
2512: PUSH
2513: FOR_IN
2514: IFFALSE 2564
// for j = 2 to i do
2516: LD_ADDR_VAR 0 3
2520: PUSH
2521: DOUBLE
2522: LD_INT 2
2524: DEC
2525: ST_TO_ADDR
2526: LD_VAR 0 2
2530: PUSH
2531: FOR_TO
2532: IFFALSE 2560
// ChangeSideFog ( i [ j ] , i [ 1 ] ) ;
2534: LD_VAR 0 2
2538: PUSH
2539: LD_VAR 0 3
2543: ARRAY
2544: PPUSH
2545: LD_VAR 0 2
2549: PUSH
2550: LD_INT 1
2552: ARRAY
2553: PPUSH
2554: CALL_OW 343
2558: GO 2531
2560: POP
2561: POP
2562: GO 2513
2564: POP
2565: POP
// end ; for i = 1 to 8 do
2566: LD_ADDR_VAR 0 2
2570: PUSH
2571: DOUBLE
2572: LD_INT 1
2574: DEC
2575: ST_TO_ADDR
2576: LD_INT 8
2578: PUSH
2579: FOR_TO
2580: IFFALSE 2670
// for j = 1 to 8 do
2582: LD_ADDR_VAR 0 3
2586: PUSH
2587: DOUBLE
2588: LD_INT 1
2590: DEC
2591: ST_TO_ADDR
2592: LD_INT 8
2594: PUSH
2595: FOR_TO
2596: IFFALSE 2666
// if Side_Teams [ i ] = Side_Teams [ j ] then
2598: LD_EXP 38
2602: PUSH
2603: LD_VAR 0 2
2607: ARRAY
2608: PUSH
2609: LD_EXP 38
2613: PUSH
2614: LD_VAR 0 3
2618: ARRAY
2619: EQUAL
2620: IFFALSE 2644
// SetAttitude ( i , j , att_friend , true ) else
2622: LD_VAR 0 2
2626: PPUSH
2627: LD_VAR 0 3
2631: PPUSH
2632: LD_INT 1
2634: PPUSH
2635: LD_INT 1
2637: PPUSH
2638: CALL_OW 80
2642: GO 2664
// SetAttitude ( i , j , att_enemy , true ) ;
2644: LD_VAR 0 2
2648: PPUSH
2649: LD_VAR 0 3
2653: PPUSH
2654: LD_INT 2
2656: PPUSH
2657: LD_INT 1
2659: PPUSH
2660: CALL_OW 80
2664: GO 2595
2666: POP
2667: POP
2668: GO 2579
2670: POP
2671: POP
// end ; end ;
2672: LD_VAR 0 1
2676: RET
// function prepare_people ( count , cl , x , y , r , var commander ) ; var j , i , un ; begin
2677: LD_INT 0
2679: PPUSH
2680: PPUSH
2681: PPUSH
2682: PPUSH
// result := [ ] ;
2683: LD_ADDR_VAR 0 7
2687: PUSH
2688: EMPTY
2689: ST_TO_ADDR
// for i := 1 to count do
2690: LD_ADDR_VAR 0 9
2694: PUSH
2695: DOUBLE
2696: LD_INT 1
2698: DEC
2699: ST_TO_ADDR
2700: LD_VAR 0 1
2704: PUSH
2705: FOR_TO
2706: IFFALSE 3010
// begin uc_direction := Rand ( 0 , 5 ) ;
2708: LD_ADDR_OWVAR 24
2712: PUSH
2713: LD_INT 0
2715: PPUSH
2716: LD_INT 5
2718: PPUSH
2719: CALL_OW 12
2723: ST_TO_ADDR
// if commander then
2724: LD_FROM_VAR 0 6
2728: IFFALSE 2777
// begin PrepareHuman ( rand ( 1 , 2 ) , cl , skill_level + 2 ) ;
2730: LD_INT 1
2732: PPUSH
2733: LD_INT 2
2735: PPUSH
2736: CALL_OW 12
2740: PPUSH
2741: LD_VAR 0 2
2745: PPUSH
2746: LD_EXP 20
2750: PUSH
2751: LD_INT 2
2753: PLUS
2754: PPUSH
2755: CALL_OW 380
// hc_importance := 105 ;
2759: LD_ADDR_OWVAR 32
2763: PUSH
2764: LD_INT 105
2766: ST_TO_ADDR
// commander := false ;
2767: LD_VAR 0 6
2771: PUSH
2772: LD_INT 0
2774: ST_TO_ADDR
// end else
2775: GO 2810
// begin PrepareHuman ( rand ( 1 , 2 ) , cl , skill_level ) ;
2777: LD_INT 1
2779: PPUSH
2780: LD_INT 2
2782: PPUSH
2783: CALL_OW 12
2787: PPUSH
2788: LD_VAR 0 2
2792: PPUSH
2793: LD_EXP 20
2797: PPUSH
2798: CALL_OW 380
// hc_importance := 0 ;
2802: LD_ADDR_OWVAR 32
2806: PUSH
2807: LD_INT 0
2809: ST_TO_ADDR
// end ; un := CreateHuman ;
2810: LD_ADDR_VAR 0 10
2814: PUSH
2815: CALL_OW 44
2819: ST_TO_ADDR
// if global_defined then
2820: LD_LOC 2
2824: IFFALSE 2962
// begin j := i ;
2826: LD_ADDR_VAR 0 8
2830: PUSH
2831: LD_VAR 0 9
2835: ST_TO_ADDR
// if cl = class_soldier then
2836: LD_VAR 0 2
2840: PUSH
2841: LD_INT 1
2843: EQUAL
2844: IFFALSE 2862
// j := i + soldiers_created ;
2846: LD_ADDR_VAR 0 8
2850: PUSH
2851: LD_VAR 0 9
2855: PUSH
2856: LD_LOC 3
2860: PLUS
2861: ST_TO_ADDR
// CopySkills ( global_units [ cl ] [ j ] , un ) ;
2862: LD_LOC 1
2866: PUSH
2867: LD_VAR 0 2
2871: ARRAY
2872: PUSH
2873: LD_VAR 0 8
2877: ARRAY
2878: PPUSH
2879: LD_VAR 0 10
2883: PPUSH
2884: CALL_OW 510
// SetAttr ( un , attr_speed , GetAttr ( global_units [ cl ] [ j ] , attr_speed ) ) ;
2888: LD_VAR 0 10
2892: PPUSH
2893: LD_INT 2
2895: PPUSH
2896: LD_LOC 1
2900: PUSH
2901: LD_VAR 0 2
2905: ARRAY
2906: PUSH
2907: LD_VAR 0 8
2911: ARRAY
2912: PPUSH
2913: LD_INT 2
2915: PPUSH
2916: CALL_OW 260
2920: PPUSH
2921: CALL_OW 239
// SetAttr ( un , attr_stamina , GetAttr ( global_units [ cl ] [ j ] , attr_stamina ) ) ;
2925: LD_VAR 0 10
2929: PPUSH
2930: LD_INT 1
2932: PPUSH
2933: LD_LOC 1
2937: PUSH
2938: LD_VAR 0 2
2942: ARRAY
2943: PUSH
2944: LD_VAR 0 8
2948: ARRAY
2949: PPUSH
2950: LD_INT 1
2952: PPUSH
2953: CALL_OW 260
2957: PPUSH
2958: CALL_OW 239
// end ; PlaceUnitXYR ( un , x , y , r , false ) ;
2962: LD_VAR 0 10
2966: PPUSH
2967: LD_VAR 0 3
2971: PPUSH
2972: LD_VAR 0 4
2976: PPUSH
2977: LD_VAR 0 5
2981: PPUSH
2982: LD_INT 0
2984: PPUSH
2985: CALL_OW 50
// result := result ^ [ un ] ;
2989: LD_ADDR_VAR 0 7
2993: PUSH
2994: LD_VAR 0 7
2998: PUSH
2999: LD_VAR 0 10
3003: PUSH
3004: EMPTY
3005: LIST
3006: ADD
3007: ST_TO_ADDR
// end ;
3008: GO 2705
3010: POP
3011: POP
// if not global_defined then
3012: LD_LOC 2
3016: NOT
3017: IFFALSE 3079
// if cl = class_soldier and global_units then
3019: LD_VAR 0 2
3023: PUSH
3024: LD_INT 1
3026: EQUAL
3027: PUSH
3028: LD_LOC 1
3032: AND
3033: IFFALSE 3060
// global_units := [ global_units [ 1 ] ^ result ] else
3035: LD_ADDR_LOC 1
3039: PUSH
3040: LD_LOC 1
3044: PUSH
3045: LD_INT 1
3047: ARRAY
3048: PUSH
3049: LD_VAR 0 7
3053: ADD
3054: PUSH
3055: EMPTY
3056: LIST
3057: ST_TO_ADDR
3058: GO 3079
// global_units := global_units ^ [ result ] end ;
3060: LD_ADDR_LOC 1
3064: PUSH
3065: LD_LOC 1
3069: PUSH
3070: LD_VAR 0 7
3074: PUSH
3075: EMPTY
3076: LIST
3077: ADD
3078: ST_TO_ADDR
3079: LD_VAR 0 7
3083: RET
// function prepare_side ( side ) ; var pos , x , y , dir , i , r , sol , br , dep , neng , nsci , nmech , nsol ; begin
3084: LD_INT 0
3086: PPUSH
3087: PPUSH
3088: PPUSH
3089: PPUSH
3090: PPUSH
3091: PPUSH
3092: PPUSH
3093: PPUSH
3094: PPUSH
3095: PPUSH
3096: PPUSH
3097: PPUSH
3098: PPUSH
3099: PPUSH
// pos := Side_Positions [ side ] ;
3100: LD_ADDR_VAR 0 3
3104: PUSH
3105: LD_EXP 40
3109: PUSH
3110: LD_VAR 0 1
3114: ARRAY
3115: ST_TO_ADDR
// if not def_siberite_bomb then
3116: LD_EXP 16
3120: NOT
3121: IFFALSE 3158
// for i = 1 to 8 do
3123: LD_ADDR_VAR 0 7
3127: PUSH
3128: DOUBLE
3129: LD_INT 1
3131: DEC
3132: ST_TO_ADDR
3133: LD_INT 8
3135: PUSH
3136: FOR_TO
3137: IFFALSE 3156
// SetTech ( tech_SibFiss , i , state_disabled ) ;
3139: LD_INT 25
3141: PPUSH
3142: LD_VAR 0 7
3146: PPUSH
3147: LD_INT 0
3149: PPUSH
3150: CALL_OW 322
3154: GO 3136
3156: POP
3157: POP
// uc_nation := Side_Nations [ side ] ;
3158: LD_ADDR_OWVAR 21
3162: PUSH
3163: LD_EXP 41
3167: PUSH
3168: LD_VAR 0 1
3172: ARRAY
3173: ST_TO_ADDR
// uc_side := side ;
3174: LD_ADDR_OWVAR 20
3178: PUSH
3179: LD_VAR 0 1
3183: ST_TO_ADDR
// x := depot_def [ pos ] [ 1 ] ;
3184: LD_ADDR_VAR 0 4
3188: PUSH
3189: LD_EXP 45
3193: PUSH
3194: LD_VAR 0 3
3198: ARRAY
3199: PUSH
3200: LD_INT 1
3202: ARRAY
3203: ST_TO_ADDR
// y := depot_def [ pos ] [ 2 ] ;
3204: LD_ADDR_VAR 0 5
3208: PUSH
3209: LD_EXP 45
3213: PUSH
3214: LD_VAR 0 3
3218: ARRAY
3219: PUSH
3220: LD_INT 2
3222: ARRAY
3223: ST_TO_ADDR
// dir := depot_def [ pos ] [ 3 ] ;
3224: LD_ADDR_VAR 0 6
3228: PUSH
3229: LD_EXP 45
3233: PUSH
3234: LD_VAR 0 3
3238: ARRAY
3239: PUSH
3240: LD_INT 3
3242: ARRAY
3243: ST_TO_ADDR
// if is_depot then
3244: LD_EXP 17
3248: IFFALSE 3373
// begin bc_type = b_depot ;
3250: LD_ADDR_OWVAR 42
3254: PUSH
3255: LD_INT 0
3257: ST_TO_ADDR
// dep := CreateAndPlaceBuildingXYD ( x , y , Depot_Def [ pos ] [ 3 ] ) ;
3258: LD_ADDR_VAR 0 11
3262: PUSH
3263: LD_VAR 0 4
3267: PPUSH
3268: LD_VAR 0 5
3272: PPUSH
3273: LD_EXP 45
3277: PUSH
3278: LD_VAR 0 3
3282: ARRAY
3283: PUSH
3284: LD_INT 3
3286: ARRAY
3287: PPUSH
3288: CALL_OW 47
3292: ST_TO_ADDR
// SetResourceType ( GetBase ( dep ) , mat_cans , starting_resources [ mat_cans ] ) ;
3293: LD_VAR 0 11
3297: PPUSH
3298: CALL_OW 274
3302: PPUSH
3303: LD_INT 1
3305: PPUSH
3306: LD_EXP 22
3310: PUSH
3311: LD_INT 1
3313: ARRAY
3314: PPUSH
3315: CALL_OW 277
// SetResourceType ( GetBase ( dep ) , mat_oil , starting_resources [ mat_oil ] ) ;
3319: LD_VAR 0 11
3323: PPUSH
3324: CALL_OW 274
3328: PPUSH
3329: LD_INT 2
3331: PPUSH
3332: LD_EXP 22
3336: PUSH
3337: LD_INT 2
3339: ARRAY
3340: PPUSH
3341: CALL_OW 277
// SetResourceType ( GetBase ( result ) , mat_siberit , starting_resources [ mat_siberit ] ) ;
3345: LD_VAR 0 2
3349: PPUSH
3350: CALL_OW 274
3354: PPUSH
3355: LD_INT 3
3357: PPUSH
3358: LD_EXP 22
3362: PUSH
3363: LD_INT 3
3365: ARRAY
3366: PPUSH
3367: CALL_OW 277
// end else
3371: GO 3517
// begin for i := 1 to 3 do
3373: LD_ADDR_VAR 0 7
3377: PUSH
3378: DOUBLE
3379: LD_INT 1
3381: DEC
3382: ST_TO_ADDR
3383: LD_INT 3
3385: PUSH
3386: FOR_TO
3387: IFFALSE 3515
// begin r := starting_resources [ i ] ;
3389: LD_ADDR_VAR 0 8
3393: PUSH
3394: LD_EXP 22
3398: PUSH
3399: LD_VAR 0 7
3403: ARRAY
3404: ST_TO_ADDR
// while r >= 10 do
3405: LD_VAR 0 8
3409: PUSH
3410: LD_INT 10
3412: GREATEREQUAL
3413: IFFALSE 3513
// if r > 50 then
3415: LD_VAR 0 8
3419: PUSH
3420: LD_INT 50
3422: GREATER
3423: IFFALSE 3469
// begin CreateResourcesXYR ( i , 5 , x , y , 4 , false ) ;
3425: LD_VAR 0 7
3429: PPUSH
3430: LD_INT 5
3432: PPUSH
3433: LD_VAR 0 4
3437: PPUSH
3438: LD_VAR 0 5
3442: PPUSH
3443: LD_INT 4
3445: PPUSH
3446: LD_INT 0
3448: PPUSH
3449: CALL_OW 60
// r := r - 50 ;
3453: LD_ADDR_VAR 0 8
3457: PUSH
3458: LD_VAR 0 8
3462: PUSH
3463: LD_INT 50
3465: MINUS
3466: ST_TO_ADDR
// end else
3467: GO 3511
// begin CreateResourcesXYR ( i , r div 10 , x , y , 4 , false ) ;
3469: LD_VAR 0 7
3473: PPUSH
3474: LD_VAR 0 8
3478: PUSH
3479: LD_INT 10
3481: DIV
3482: PPUSH
3483: LD_VAR 0 4
3487: PPUSH
3488: LD_VAR 0 5
3492: PPUSH
3493: LD_INT 4
3495: PPUSH
3496: LD_INT 0
3498: PPUSH
3499: CALL_OW 60
// r := 0 ;
3503: LD_ADDR_VAR 0 8
3507: PUSH
3508: LD_INT 0
3510: ST_TO_ADDR
// end ;
3511: GO 3405
// end ;
3513: GO 3386
3515: POP
3516: POP
// end ; for r in starting_crates do
3517: LD_ADDR_VAR 0 8
3521: PUSH
3522: LD_EXP 21
3526: PUSH
3527: FOR_IN
3528: IFFALSE 3560
// CreateResourcesXYR ( mat_cans , 5 , x , y , r , false ) ;
3530: LD_INT 1
3532: PPUSH
3533: LD_INT 5
3535: PPUSH
3536: LD_VAR 0 4
3540: PPUSH
3541: LD_VAR 0 5
3545: PPUSH
3546: LD_VAR 0 8
3550: PPUSH
3551: LD_INT 0
3553: PPUSH
3554: CALL_OW 60
3558: GO 3527
3560: POP
3561: POP
// if def_morale_flags then
3562: LD_EXP 10
3566: IFFALSE 3665
// begin battle_flags_id := battle_flags_id ^ SetBattleFlag ( side , flags_def [ pos ] [ 1 ] , flags_def [ pos ] [ 2 ] , [ [ bfo_defend_bonus_human , 100 ] , [ bfo_defend_bonus_vehicle , 50 ] , [ bfo_defend_bonus_building , 20 ] , [ bfo_height , 100 ] ] ) ;
3568: LD_ADDR_EXP 29
3572: PUSH
3573: LD_EXP 29
3577: PUSH
3578: LD_VAR 0 1
3582: PPUSH
3583: LD_EXP 53
3587: PUSH
3588: LD_VAR 0 3
3592: ARRAY
3593: PUSH
3594: LD_INT 1
3596: ARRAY
3597: PPUSH
3598: LD_EXP 53
3602: PUSH
3603: LD_VAR 0 3
3607: ARRAY
3608: PUSH
3609: LD_INT 2
3611: ARRAY
3612: PPUSH
3613: LD_INT 1
3615: PUSH
3616: LD_INT 100
3618: PUSH
3619: EMPTY
3620: LIST
3621: LIST
3622: PUSH
3623: LD_INT 2
3625: PUSH
3626: LD_INT 50
3628: PUSH
3629: EMPTY
3630: LIST
3631: LIST
3632: PUSH
3633: LD_INT 3
3635: PUSH
3636: LD_INT 20
3638: PUSH
3639: EMPTY
3640: LIST
3641: LIST
3642: PUSH
3643: LD_INT 20
3645: PUSH
3646: LD_INT 100
3648: PUSH
3649: EMPTY
3650: LIST
3651: LIST
3652: PUSH
3653: EMPTY
3654: LIST
3655: LIST
3656: LIST
3657: LIST
3658: PPUSH
3659: CALL_OW 418
3663: ADD
3664: ST_TO_ADDR
// end ; neng := number_of_people ;
3665: LD_ADDR_VAR 0 12
3669: PUSH
3670: LD_EXP 19
3674: ST_TO_ADDR
// nsol := number_of_breastworks ;
3675: LD_ADDR_VAR 0 15
3679: PUSH
3680: LD_EXP 18
3684: ST_TO_ADDR
// if nsol < neng div 4 then
3685: LD_VAR 0 15
3689: PUSH
3690: LD_VAR 0 12
3694: PUSH
3695: LD_INT 4
3697: DIV
3698: LESS
3699: IFFALSE 3715
// nsol := neng div 4 ;
3701: LD_ADDR_VAR 0 15
3705: PUSH
3706: LD_VAR 0 12
3710: PUSH
3711: LD_INT 4
3713: DIV
3714: ST_TO_ADDR
// neng := neng - nsol ;
3715: LD_ADDR_VAR 0 12
3719: PUSH
3720: LD_VAR 0 12
3724: PUSH
3725: LD_VAR 0 15
3729: MINUS
3730: ST_TO_ADDR
// nsci := neng div 3 ;
3731: LD_ADDR_VAR 0 13
3735: PUSH
3736: LD_VAR 0 12
3740: PUSH
3741: LD_INT 3
3743: DIV
3744: ST_TO_ADDR
// if nsci < 1 then
3745: LD_VAR 0 13
3749: PUSH
3750: LD_INT 1
3752: LESS
3753: IFFALSE 3763
// nsci := 1 ;
3755: LD_ADDR_VAR 0 13
3759: PUSH
3760: LD_INT 1
3762: ST_TO_ADDR
// neng := neng - nsci ;
3763: LD_ADDR_VAR 0 12
3767: PUSH
3768: LD_VAR 0 12
3772: PUSH
3773: LD_VAR 0 13
3777: MINUS
3778: ST_TO_ADDR
// nmech := neng div 2 ;
3779: LD_ADDR_VAR 0 14
3783: PUSH
3784: LD_VAR 0 12
3788: PUSH
3789: LD_INT 2
3791: DIV
3792: ST_TO_ADDR
// neng := neng - nmech ;
3793: LD_ADDR_VAR 0 12
3797: PUSH
3798: LD_VAR 0 12
3802: PUSH
3803: LD_VAR 0 14
3807: MINUS
3808: ST_TO_ADDR
// if neng < 1 then
3809: LD_VAR 0 12
3813: PUSH
3814: LD_INT 1
3816: LESS
3817: IFFALSE 3827
// neng := 1 ;
3819: LD_ADDR_VAR 0 12
3823: PUSH
3824: LD_INT 1
3826: ST_TO_ADDR
// commander := true ;
3827: LD_ADDR_EXP 54
3831: PUSH
3832: LD_INT 1
3834: ST_TO_ADDR
// soldiers_created := 0 ;
3835: LD_ADDR_LOC 3
3839: PUSH
3840: LD_INT 0
3842: ST_TO_ADDR
// for i := 1 to number_of_breastworks do
3843: LD_ADDR_VAR 0 7
3847: PUSH
3848: DOUBLE
3849: LD_INT 1
3851: DEC
3852: ST_TO_ADDR
3853: LD_EXP 18
3857: PUSH
3858: FOR_TO
3859: IFFALSE 4108
// begin x := breastworks_def [ pos ] [ i ] [ 1 ] ;
3861: LD_ADDR_VAR 0 4
3865: PUSH
3866: LD_EXP 46
3870: PUSH
3871: LD_VAR 0 3
3875: ARRAY
3876: PUSH
3877: LD_VAR 0 7
3881: ARRAY
3882: PUSH
3883: LD_INT 1
3885: ARRAY
3886: ST_TO_ADDR
// y := breastworks_def [ pos ] [ i ] [ 2 ] ;
3887: LD_ADDR_VAR 0 5
3891: PUSH
3892: LD_EXP 46
3896: PUSH
3897: LD_VAR 0 3
3901: ARRAY
3902: PUSH
3903: LD_VAR 0 7
3907: ARRAY
3908: PUSH
3909: LD_INT 2
3911: ARRAY
3912: ST_TO_ADDR
// bc_type := b_breastwork ;
3913: LD_ADDR_OWVAR 42
3917: PUSH
3918: LD_INT 31
3920: ST_TO_ADDR
// br := CreateAndPlaceBuildingXYD ( x , y , breastworks_def [ pos ] [ i ] [ 3 ] ) ;
3921: LD_ADDR_VAR 0 10
3925: PUSH
3926: LD_VAR 0 4
3930: PPUSH
3931: LD_VAR 0 5
3935: PPUSH
3936: LD_EXP 46
3940: PUSH
3941: LD_VAR 0 3
3945: ARRAY
3946: PUSH
3947: LD_VAR 0 7
3951: ARRAY
3952: PUSH
3953: LD_INT 3
3955: ARRAY
3956: PPUSH
3957: CALL_OW 47
3961: ST_TO_ADDR
// x := ShiftX ( x , breastworks_def [ pos ] [ i ] [ 3 ] , 2 ) ;
3962: LD_ADDR_VAR 0 4
3966: PUSH
3967: LD_VAR 0 4
3971: PPUSH
3972: LD_EXP 46
3976: PUSH
3977: LD_VAR 0 3
3981: ARRAY
3982: PUSH
3983: LD_VAR 0 7
3987: ARRAY
3988: PUSH
3989: LD_INT 3
3991: ARRAY
3992: PPUSH
3993: LD_INT 2
3995: PPUSH
3996: CALL_OW 272
4000: ST_TO_ADDR
// y := ShiftY ( y , breastworks_def [ pos ] [ i ] [ 3 ] , 2 ) ;
4001: LD_ADDR_VAR 0 5
4005: PUSH
4006: LD_VAR 0 5
4010: PPUSH
4011: LD_EXP 46
4015: PUSH
4016: LD_VAR 0 3
4020: ARRAY
4021: PUSH
4022: LD_VAR 0 7
4026: ARRAY
4027: PUSH
4028: LD_INT 3
4030: ARRAY
4031: PPUSH
4032: LD_INT 2
4034: PPUSH
4035: CALL_OW 273
4039: ST_TO_ADDR
// sol := prepare_people ( 1 , class_soldier , x , y , 1 , commander ) [ 1 ] ;
4040: LD_ADDR_VAR 0 9
4044: PUSH
4045: LD_INT 1
4047: PPUSH
4048: LD_INT 1
4050: PPUSH
4051: LD_VAR 0 4
4055: PPUSH
4056: LD_VAR 0 5
4060: PPUSH
4061: LD_INT 1
4063: PPUSH
4064: LD_ADDR_EXP 54
4068: PPUSH
4069: CALL 2677 0 6
4073: PUSH
4074: LD_INT 1
4076: ARRAY
4077: ST_TO_ADDR
// soldiers_created := soldiers_created + 1 ;
4078: LD_ADDR_LOC 3
4082: PUSH
4083: LD_LOC 3
4087: PUSH
4088: LD_INT 1
4090: PLUS
4091: ST_TO_ADDR
// ComEnterUnit ( sol , br ) ;
4092: LD_VAR 0 9
4096: PPUSH
4097: LD_VAR 0 10
4101: PPUSH
4102: CALL_OW 120
// end ;
4106: GO 3858
4108: POP
4109: POP
// x := start_def [ pos ] [ 1 ] ;
4110: LD_ADDR_VAR 0 4
4114: PUSH
4115: LD_EXP 47
4119: PUSH
4120: LD_VAR 0 3
4124: ARRAY
4125: PUSH
4126: LD_INT 1
4128: ARRAY
4129: ST_TO_ADDR
// y := start_def [ pos ] [ 2 ] ;
4130: LD_ADDR_VAR 0 5
4134: PUSH
4135: LD_EXP 47
4139: PUSH
4140: LD_VAR 0 3
4144: ARRAY
4145: PUSH
4146: LD_INT 2
4148: ARRAY
4149: ST_TO_ADDR
// prepare_people ( nsol - number_of_breastworks , class_soldier , x , y , 5 , commander ) ;
4150: LD_VAR 0 15
4154: PUSH
4155: LD_EXP 18
4159: MINUS
4160: PPUSH
4161: LD_INT 1
4163: PPUSH
4164: LD_VAR 0 4
4168: PPUSH
4169: LD_VAR 0 5
4173: PPUSH
4174: LD_INT 5
4176: PPUSH
4177: LD_ADDR_EXP 54
4181: PPUSH
4182: CALL 2677 0 6
// prepare_people ( neng , class_engineer , x , y , 5 , commander ) ;
4186: LD_VAR 0 12
4190: PPUSH
4191: LD_INT 2
4193: PPUSH
4194: LD_VAR 0 4
4198: PPUSH
4199: LD_VAR 0 5
4203: PPUSH
4204: LD_INT 5
4206: PPUSH
4207: LD_ADDR_EXP 54
4211: PPUSH
4212: CALL 2677 0 6
// prepare_people ( nmech , class_mechanic , x , y , 5 , commander ) ;
4216: LD_VAR 0 14
4220: PPUSH
4221: LD_INT 3
4223: PPUSH
4224: LD_VAR 0 4
4228: PPUSH
4229: LD_VAR 0 5
4233: PPUSH
4234: LD_INT 5
4236: PPUSH
4237: LD_ADDR_EXP 54
4241: PPUSH
4242: CALL 2677 0 6
// prepare_people ( nsci , class_scientistic , x , y , 5 , commander ) ;
4246: LD_VAR 0 13
4250: PPUSH
4251: LD_INT 4
4253: PPUSH
4254: LD_VAR 0 4
4258: PPUSH
4259: LD_VAR 0 5
4263: PPUSH
4264: LD_INT 5
4266: PPUSH
4267: LD_ADDR_EXP 54
4271: PPUSH
4272: CALL 2677 0 6
// if def_siberite_detection then
4276: LD_EXP 11
4280: IFFALSE 4297
// SetTech ( tech_SibDet , side , state_researched ) ;
4282: LD_INT 20
4284: PPUSH
4285: LD_VAR 0 1
4289: PPUSH
4290: LD_INT 2
4292: PPUSH
4293: CALL_OW 322
// end ;
4297: LD_VAR 0 2
4301: RET
// function prepare_sides ; var i ; begin
4302: LD_INT 0
4304: PPUSH
4305: PPUSH
// global_units := [ ] ;
4306: LD_ADDR_LOC 1
4310: PUSH
4311: EMPTY
4312: ST_TO_ADDR
// global_defined := false ;
4313: LD_ADDR_LOC 2
4317: PUSH
4318: LD_INT 0
4320: ST_TO_ADDR
// for i := 1 to 8 do
4321: LD_ADDR_VAR 0 2
4325: PUSH
4326: DOUBLE
4327: LD_INT 1
4329: DEC
4330: ST_TO_ADDR
4331: LD_INT 8
4333: PUSH
4334: FOR_TO
4335: IFFALSE 4360
// if Side_Positions [ i ] then
4337: LD_EXP 40
4341: PUSH
4342: LD_VAR 0 2
4346: ARRAY
4347: IFFALSE 4358
// prepare_side ( i ) ;
4349: LD_VAR 0 2
4353: PPUSH
4354: CALL 3084 0 1
4358: GO 4334
4360: POP
4361: POP
// end ;
4362: LD_VAR 0 1
4366: RET
// starting begin FogOff ( false ) ;
4367: LD_INT 0
4369: PPUSH
4370: CALL_OW 344
// disable ( 98 ) ;
4374: LD_INT 98
4376: DISABLE_MARKED
// disable ( 99 ) ;
4377: LD_INT 99
4379: DISABLE_MARKED
// disable ( 100 ) ;
4380: LD_INT 100
4382: DISABLE_MARKED
// mp_selectmsg := true ;
4383: LD_ADDR_OWVAR 13
4387: PUSH
4388: LD_INT 1
4390: ST_TO_ADDR
// read_multiplayer_and_game_parameters ;
4391: CALL 0 0 0
// init_map ;
4395: CALL 1152 0 0
// init_respawning ;
4399: CALL 5428 0 0
// set_shared_visions_and_alliances ;
4403: CALL 2314 0 0
// prepare_sides ;
4407: CALL 4302 0 0
// init_win_condition ;
4411: CALL 6167 0 0
// your_side := Player_Side ;
4415: LD_ADDR_OWVAR 2
4419: PUSH
4420: LD_EXP 36
4424: ST_TO_ADDR
// ResetFog ;
4425: CALL_OW 335
// music_nat := Side_Nations [ your_side ] ;
4429: LD_ADDR_OWVAR 71
4433: PUSH
4434: LD_EXP 41
4438: PUSH
4439: LD_OWVAR 2
4443: ARRAY
4444: ST_TO_ADDR
// CenterNowOnXY ( start_def [ Side_Positions [ your_side ] ] [ 1 ] , start_def [ Side_Positions [ your_side ] ] [ 2 ] ) ;
4445: LD_EXP 47
4449: PUSH
4450: LD_EXP 40
4454: PUSH
4455: LD_OWVAR 2
4459: ARRAY
4460: ARRAY
4461: PUSH
4462: LD_INT 1
4464: ARRAY
4465: PPUSH
4466: LD_EXP 47
4470: PUSH
4471: LD_EXP 40
4475: PUSH
4476: LD_OWVAR 2
4480: ARRAY
4481: ARRAY
4482: PUSH
4483: LD_INT 2
4485: ARRAY
4486: PPUSH
4487: CALL_OW 86
// end ; end_of_file
4491: END
// every 1 1$0 + 0 0$0.3 do
4492: GO 4494
4494: DISABLE
// begin CreateCratesAnywhere ( Rand ( 4 , 5 ) , true ) ;
4495: LD_INT 4
4497: PPUSH
4498: LD_INT 5
4500: PPUSH
4501: CALL_OW 12
4505: PPUSH
4506: LD_INT 1
4508: PPUSH
4509: CALL_OW 57
// enable ;
4513: ENABLE
// end ;
4514: END
// every 0 0$1 + 0 0$0.6 do var i ;
4515: GO 4517
4517: DISABLE
4518: LD_INT 0
4520: PPUSH
// begin case tick of 1 .. 1 1$0 :
4521: LD_OWVAR 1
4525: PUSH
4526: LD_INT 1
4528: DOUBLE
4529: GREATEREQUAL
4530: IFFALSE 4538
4532: LD_INT 2100
4534: DOUBLE
4535: LESSEQUAL
4536: IFTRUE 4540
4538: GO 4568
4540: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$10 , 0 0$30 ) ) ; 1 1$0 + 1 .. 5 5$0 :
4541: LD_EXP 23
4545: PUSH
4546: LD_INT 100
4548: DIVREAL
4549: PUSH
4550: LD_INT 350
4552: PPUSH
4553: LD_INT 1050
4555: PPUSH
4556: CALL_OW 12
4560: MUL
4561: PPUSH
4562: CALL_OW 67
4566: GO 4870
4568: LD_INT 2100
4570: PUSH
4571: LD_INT 1
4573: PLUS
4574: DOUBLE
4575: GREATEREQUAL
4576: IFFALSE 4584
4578: LD_INT 10500
4580: DOUBLE
4581: LESSEQUAL
4582: IFTRUE 4586
4584: GO 4614
4586: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$30 , 0 0$45 ) ) ; 5 5$0 + 1 .. 10 10$0 :
4587: LD_EXP 23
4591: PUSH
4592: LD_INT 100
4594: DIVREAL
4595: PUSH
4596: LD_INT 1050
4598: PPUSH
4599: LD_INT 1575
4601: PPUSH
4602: CALL_OW 12
4606: MUL
4607: PPUSH
4608: CALL_OW 67
4612: GO 4870
4614: LD_INT 10500
4616: PUSH
4617: LD_INT 1
4619: PLUS
4620: DOUBLE
4621: GREATEREQUAL
4622: IFFALSE 4630
4624: LD_INT 21000
4626: DOUBLE
4627: LESSEQUAL
4628: IFTRUE 4632
4630: GO 4660
4632: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$45 , 1 1$0 ) ) ; 10 10$0 + 1 .. 20 20$0 :
4633: LD_EXP 23
4637: PUSH
4638: LD_INT 100
4640: DIVREAL
4641: PUSH
4642: LD_INT 1575
4644: PPUSH
4645: LD_INT 2100
4647: PPUSH
4648: CALL_OW 12
4652: MUL
4653: PPUSH
4654: CALL_OW 67
4658: GO 4870
4660: LD_INT 21000
4662: PUSH
4663: LD_INT 1
4665: PLUS
4666: DOUBLE
4667: GREATEREQUAL
4668: IFFALSE 4676
4670: LD_INT 42000
4672: DOUBLE
4673: LESSEQUAL
4674: IFTRUE 4678
4676: GO 4706
4678: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$0 , 1 1$15 ) ) ; 20 20$0 + 1 .. 30 30$0 :
4679: LD_EXP 23
4683: PUSH
4684: LD_INT 100
4686: DIVREAL
4687: PUSH
4688: LD_INT 2100
4690: PPUSH
4691: LD_INT 2625
4693: PPUSH
4694: CALL_OW 12
4698: MUL
4699: PPUSH
4700: CALL_OW 67
4704: GO 4870
4706: LD_INT 42000
4708: PUSH
4709: LD_INT 1
4711: PLUS
4712: DOUBLE
4713: GREATEREQUAL
4714: IFFALSE 4722
4716: LD_INT 63000
4718: DOUBLE
4719: LESSEQUAL
4720: IFTRUE 4724
4722: GO 4752
4724: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$15 , 1 1$30 ) ) ; 30 30$0 + 1 .. 50 50$0 :
4725: LD_EXP 23
4729: PUSH
4730: LD_INT 100
4732: DIVREAL
4733: PUSH
4734: LD_INT 2625
4736: PPUSH
4737: LD_INT 3150
4739: PPUSH
4740: CALL_OW 12
4744: MUL
4745: PPUSH
4746: CALL_OW 67
4750: GO 4870
4752: LD_INT 63000
4754: PUSH
4755: LD_INT 1
4757: PLUS
4758: DOUBLE
4759: GREATEREQUAL
4760: IFFALSE 4768
4762: LD_INT 105000
4764: DOUBLE
4765: LESSEQUAL
4766: IFTRUE 4770
4768: GO 4798
4770: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$30 , 1 1$45 ) ) ; 50 50$0 + 1 .. 300 300$0 :
4771: LD_EXP 23
4775: PUSH
4776: LD_INT 100
4778: DIVREAL
4779: PUSH
4780: LD_INT 3150
4782: PPUSH
4783: LD_INT 3675
4785: PPUSH
4786: CALL_OW 12
4790: MUL
4791: PPUSH
4792: CALL_OW 67
4796: GO 4870
4798: LD_INT 105000
4800: PUSH
4801: LD_INT 1
4803: PLUS
4804: DOUBLE
4805: GREATEREQUAL
4806: IFFALSE 4814
4808: LD_INT 630000
4810: DOUBLE
4811: LESSEQUAL
4812: IFTRUE 4816
4814: GO 4844
4816: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$45 , 2 2$0 ) ) ; else
4817: LD_EXP 23
4821: PUSH
4822: LD_INT 100
4824: DIVREAL
4825: PUSH
4826: LD_INT 3675
4828: PPUSH
4829: LD_INT 4200
4831: PPUSH
4832: CALL_OW 12
4836: MUL
4837: PPUSH
4838: CALL_OW 67
4842: GO 4870
4844: POP
// Wait ( shipments_density / 100 * Rand ( 2 2$0 , 2 2$30 ) ) ; end ;
4845: LD_EXP 23
4849: PUSH
4850: LD_INT 100
4852: DIVREAL
4853: PUSH
4854: LD_INT 4200
4856: PPUSH
4857: LD_INT 5250
4859: PPUSH
4860: CALL_OW 12
4864: MUL
4865: PPUSH
4866: CALL_OW 67
// for i in ( Side_Positions diff [ 0 ] ) do
4870: LD_ADDR_VAR 0 1
4874: PUSH
4875: LD_EXP 40
4879: PUSH
4880: LD_INT 0
4882: PUSH
4883: EMPTY
4884: LIST
4885: DIFF
4886: PUSH
4887: FOR_IN
4888: IFFALSE 4950
// begin CreateCratesXYR ( Rand ( 3 , 5 ) , start_def [ i ] [ 1 ] , start_def [ i ] [ 2 ] , 20 , true ) ;
4890: LD_INT 3
4892: PPUSH
4893: LD_INT 5
4895: PPUSH
4896: CALL_OW 12
4900: PPUSH
4901: LD_EXP 47
4905: PUSH
4906: LD_VAR 0 1
4910: ARRAY
4911: PUSH
4912: LD_INT 1
4914: ARRAY
4915: PPUSH
4916: LD_EXP 47
4920: PUSH
4921: LD_VAR 0 1
4925: ARRAY
4926: PUSH
4927: LD_INT 2
4929: ARRAY
4930: PPUSH
4931: LD_INT 20
4933: PPUSH
4934: LD_INT 1
4936: PPUSH
4937: CALL_OW 56
// Wait ( 2 ) ;
4941: LD_INT 2
4943: PPUSH
4944: CALL_OW 67
// end ;
4948: GO 4887
4950: POP
4951: POP
// enable ;
4952: ENABLE
// end ;
4953: PPOPN 1
4955: END
// every 0 0$20 + 0 0$0.9 do var i , filter ;
4956: GO 4958
4958: DISABLE
4959: LD_INT 0
4961: PPUSH
4962: PPUSH
// begin if GetResourceArea ( MZBaseArea , mat_cans ) < ( ( 200 - shipments_density ) / 100 * 5 ) then
4963: LD_INT 1
4965: PPUSH
4966: LD_INT 1
4968: PPUSH
4969: CALL_OW 287
4973: PUSH
4974: LD_INT 200
4976: PUSH
4977: LD_EXP 23
4981: MINUS
4982: PUSH
4983: LD_INT 100
4985: DIVREAL
4986: PUSH
4987: LD_INT 5
4989: MUL
4990: LESS
4991: IFFALSE 5014
// CreateCratesArea ( Rand ( 3 , 5 ) , MZBaseArea , true ) ;
4993: LD_INT 3
4995: PPUSH
4996: LD_INT 5
4998: PPUSH
4999: CALL_OW 12
5003: PPUSH
5004: LD_INT 1
5006: PPUSH
5007: LD_INT 1
5009: PPUSH
5010: CALL_OW 55
// enable ;
5014: ENABLE
// end ; end_of_file
5015: PPOPN 2
5017: END
// function apeman_init ; begin
5018: LD_INT 0
5020: PPUSH
// uc_side := 0 ;
5021: LD_ADDR_OWVAR 20
5025: PUSH
5026: LD_INT 0
5028: ST_TO_ADDR
// uc_nation := nation_nature ;
5029: LD_ADDR_OWVAR 21
5033: PUSH
5034: LD_INT 0
5036: ST_TO_ADDR
// hc_class := class_apeman ;
5037: LD_ADDR_OWVAR 28
5041: PUSH
5042: LD_INT 12
5044: ST_TO_ADDR
// hc_basic_skills := [ 1 , 1 , 1 , 1 ] ;
5045: LD_ADDR_OWVAR 30
5049: PUSH
5050: LD_INT 1
5052: PUSH
5053: LD_INT 1
5055: PUSH
5056: LD_INT 1
5058: PUSH
5059: LD_INT 1
5061: PUSH
5062: EMPTY
5063: LIST
5064: LIST
5065: LIST
5066: LIST
5067: ST_TO_ADDR
// hc_skills := [ 1 , 1 , 1 , 1 ] ;
5068: LD_ADDR_OWVAR 31
5072: PUSH
5073: LD_INT 1
5075: PUSH
5076: LD_INT 1
5078: PUSH
5079: LD_INT 1
5081: PUSH
5082: LD_INT 1
5084: PUSH
5085: EMPTY
5086: LIST
5087: LIST
5088: LIST
5089: LIST
5090: ST_TO_ADDR
// hc_attr := [ 10 , 12 ] ;
5091: LD_ADDR_OWVAR 29
5095: PUSH
5096: LD_INT 10
5098: PUSH
5099: LD_INT 12
5101: PUSH
5102: EMPTY
5103: LIST
5104: LIST
5105: ST_TO_ADDR
// hc_sex := sex_male ;
5106: LD_ADDR_OWVAR 27
5110: PUSH
5111: LD_INT 1
5113: ST_TO_ADDR
// hc_importance := 0 ;
5114: LD_ADDR_OWVAR 32
5118: PUSH
5119: LD_INT 0
5121: ST_TO_ADDR
// hc_agressivity := Rand ( - 20 , 20 ) ;
5122: LD_ADDR_OWVAR 35
5126: PUSH
5127: LD_INT 20
5129: NEG
5130: PPUSH
5131: LD_INT 20
5133: PPUSH
5134: CALL_OW 12
5138: ST_TO_ADDR
// end ;
5139: LD_VAR 0 1
5143: RET
// function prepare_apemen ; var i , j , un , ape , first , d1 , d2 ; begin
5144: LD_INT 0
5146: PPUSH
5147: PPUSH
5148: PPUSH
5149: PPUSH
5150: PPUSH
5151: PPUSH
5152: PPUSH
5153: PPUSH
// if not amount_of_apemen then
5154: LD_EXP 24
5158: NOT
5159: IFFALSE 5163
// exit ;
5161: GO 5415
// ape := 0 ;
5163: LD_ADDR_VAR 0 5
5167: PUSH
5168: LD_INT 0
5170: ST_TO_ADDR
// repeat Wait ( ( ape + 1 ) * Rand ( 0 0$10 , 1 1$0 ) ) ;
5171: LD_VAR 0 5
5175: PUSH
5176: LD_INT 1
5178: PLUS
5179: PUSH
5180: LD_INT 350
5182: PPUSH
5183: LD_INT 2100
5185: PPUSH
5186: CALL_OW 12
5190: MUL
5191: PPUSH
5192: CALL_OW 67
// apeman_init ;
5196: CALL 5018 0 0
// for i := 1 to 6 do
5200: LD_ADDR_VAR 0 2
5204: PUSH
5205: DOUBLE
5206: LD_INT 1
5208: DEC
5209: ST_TO_ADDR
5210: LD_INT 6
5212: PUSH
5213: FOR_TO
5214: IFFALSE 5387
// begin case i of 1 :
5216: LD_VAR 0 2
5220: PUSH
5221: LD_INT 1
5223: DOUBLE
5224: EQUAL
5225: IFTRUE 5229
5227: GO 5247
5229: POP
// PlaceUnitArea ( CreateHuman , Base1ApeArea , false ) ; 2 :
5230: CALL_OW 44
5234: PPUSH
5235: LD_INT 2
5237: PPUSH
5238: LD_INT 0
5240: PPUSH
5241: CALL_OW 49
5245: GO 5378
5247: LD_INT 2
5249: DOUBLE
5250: EQUAL
5251: IFTRUE 5255
5253: GO 5273
5255: POP
// PlaceUnitArea ( CreateHuman , Base2ApeArea , false ) ; 3 :
5256: CALL_OW 44
5260: PPUSH
5261: LD_INT 3
5263: PPUSH
5264: LD_INT 0
5266: PPUSH
5267: CALL_OW 49
5271: GO 5378
5273: LD_INT 3
5275: DOUBLE
5276: EQUAL
5277: IFTRUE 5281
5279: GO 5299
5281: POP
// PlaceUnitArea ( CreateHuman , Base3ApeArea , false ) ; 4 :
5282: CALL_OW 44
5286: PPUSH
5287: LD_INT 4
5289: PPUSH
5290: LD_INT 0
5292: PPUSH
5293: CALL_OW 49
5297: GO 5378
5299: LD_INT 4
5301: DOUBLE
5302: EQUAL
5303: IFTRUE 5307
5305: GO 5325
5307: POP
// PlaceUnitArea ( CreateHuman , Base4ApeArea , false ) ; 5 :
5308: CALL_OW 44
5312: PPUSH
5313: LD_INT 5
5315: PPUSH
5316: LD_INT 0
5318: PPUSH
5319: CALL_OW 49
5323: GO 5378
5325: LD_INT 5
5327: DOUBLE
5328: EQUAL
5329: IFTRUE 5333
5331: GO 5351
5333: POP
// PlaceUnitArea ( CreateHuman , Base5ApeArea , false ) ; 6 :
5334: CALL_OW 44
5338: PPUSH
5339: LD_INT 6
5341: PPUSH
5342: LD_INT 0
5344: PPUSH
5345: CALL_OW 49
5349: GO 5378
5351: LD_INT 6
5353: DOUBLE
5354: EQUAL
5355: IFTRUE 5359
5357: GO 5377
5359: POP
// PlaceUnitArea ( CreateHuman , Base6ApeArea , false ) ; end ;
5360: CALL_OW 44
5364: PPUSH
5365: LD_INT 7
5367: PPUSH
5368: LD_INT 0
5370: PPUSH
5371: CALL_OW 49
5375: GO 5378
5377: POP
// Wait ( 3 ) ;
5378: LD_INT 3
5380: PPUSH
5381: CALL_OW 67
// end ;
5385: GO 5213
5387: POP
5388: POP
// ape := ape + 1 ;
5389: LD_ADDR_VAR 0 5
5393: PUSH
5394: LD_VAR 0 5
5398: PUSH
5399: LD_INT 1
5401: PLUS
5402: ST_TO_ADDR
// until ape >= amount_of_apemen ;
5403: LD_VAR 0 5
5407: PUSH
5408: LD_EXP 24
5412: GREATEREQUAL
5413: IFFALSE 5171
// end ;
5415: LD_VAR 0 1
5419: RET
// every 0 0$15 do
5420: GO 5422
5422: DISABLE
// begin prepare_apemen ;
5423: CALL 5144 0 0
// end ; end_of_file
5427: END
// var respawn , inqueue ; export function init_respawning ; begin
5428: LD_INT 0
5430: PPUSH
// respawn := Rand ( 1 , 8 ) ;
5431: LD_ADDR_LOC 4
5435: PUSH
5436: LD_INT 1
5438: PPUSH
5439: LD_INT 8
5441: PPUSH
5442: CALL_OW 12
5446: ST_TO_ADDR
// inqueue := [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ;
5447: LD_ADDR_LOC 5
5451: PUSH
5452: LD_INT 0
5454: PUSH
5455: LD_INT 0
5457: PUSH
5458: LD_INT 0
5460: PUSH
5461: LD_INT 0
5463: PUSH
5464: LD_INT 0
5466: PUSH
5467: LD_INT 0
5469: PUSH
5470: LD_INT 0
5472: PUSH
5473: LD_INT 0
5475: PUSH
5476: EMPTY
5477: LIST
5478: LIST
5479: LIST
5480: LIST
5481: LIST
5482: LIST
5483: LIST
5484: LIST
5485: ST_TO_ADDR
// end ;
5486: LD_VAR 0 1
5490: RET
// every 0 0$1 + 0 0$0.5 do var n , dep , aktresp ;
5491: GO 5493
5493: DISABLE
5494: LD_INT 0
5496: PPUSH
5497: PPUSH
5498: PPUSH
// begin if respawning_time_max = 0 then
5499: LD_EXP 27
5503: PUSH
5504: LD_INT 0
5506: EQUAL
5507: IFFALSE 5511
// exit ;
5509: GO 5901
// if respawn = 8 then
5511: LD_LOC 4
5515: PUSH
5516: LD_INT 8
5518: EQUAL
5519: IFFALSE 5531
// respawn := 1 else
5521: LD_ADDR_LOC 4
5525: PUSH
5526: LD_INT 1
5528: ST_TO_ADDR
5529: GO 5545
// respawn := respawn + 1 ;
5531: LD_ADDR_LOC 4
5535: PUSH
5536: LD_LOC 4
5540: PUSH
5541: LD_INT 1
5543: PLUS
5544: ST_TO_ADDR
// if Side_Positions [ respawn ] and not inqueue [ respawn ] then
5545: LD_EXP 40
5549: PUSH
5550: LD_LOC 4
5554: ARRAY
5555: PUSH
5556: LD_LOC 5
5560: PUSH
5561: LD_LOC 4
5565: ARRAY
5566: NOT
5567: AND
5568: IFFALSE 5900
// begin n := FilterAllUnits ( [ [ f_type , unit_human ] , [ f_side , respawn ] ] ) ;
5570: LD_ADDR_VAR 0 1
5574: PUSH
5575: LD_INT 21
5577: PUSH
5578: LD_INT 1
5580: PUSH
5581: EMPTY
5582: LIST
5583: LIST
5584: PUSH
5585: LD_INT 22
5587: PUSH
5588: LD_LOC 4
5592: PUSH
5593: EMPTY
5594: LIST
5595: LIST
5596: PUSH
5597: EMPTY
5598: LIST
5599: LIST
5600: PPUSH
5601: CALL_OW 69
5605: ST_TO_ADDR
// if n < number_of_people then
5606: LD_VAR 0 1
5610: PUSH
5611: LD_EXP 19
5615: LESS
5616: IFFALSE 5897
// begin dep := FilterAllUnits ( [ [ f_type , unit_building ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] , [ f_ok ] , [ f_side , respawn ] ] ) ;
5618: LD_ADDR_VAR 0 2
5622: PUSH
5623: LD_INT 21
5625: PUSH
5626: LD_INT 3
5628: PUSH
5629: EMPTY
5630: LIST
5631: LIST
5632: PUSH
5633: LD_INT 2
5635: PUSH
5636: LD_INT 30
5638: PUSH
5639: LD_INT 0
5641: PUSH
5642: EMPTY
5643: LIST
5644: LIST
5645: PUSH
5646: LD_INT 30
5648: PUSH
5649: LD_INT 1
5651: PUSH
5652: EMPTY
5653: LIST
5654: LIST
5655: PUSH
5656: EMPTY
5657: LIST
5658: LIST
5659: LIST
5660: PUSH
5661: LD_INT 50
5663: PUSH
5664: EMPTY
5665: LIST
5666: PUSH
5667: LD_INT 22
5669: PUSH
5670: LD_LOC 4
5674: PUSH
5675: EMPTY
5676: LIST
5677: LIST
5678: PUSH
5679: EMPTY
5680: LIST
5681: LIST
5682: LIST
5683: LIST
5684: PPUSH
5685: CALL_OW 69
5689: ST_TO_ADDR
// if dep then
5690: LD_VAR 0 2
5694: IFFALSE 5894
// begin aktresp := respawn ;
5696: LD_ADDR_VAR 0 3
5700: PUSH
5701: LD_LOC 4
5705: ST_TO_ADDR
// inqueue := Replace ( inqueue , aktresp , true ) ;
5706: LD_ADDR_LOC 5
5710: PUSH
5711: LD_LOC 5
5715: PPUSH
5716: LD_VAR 0 3
5720: PPUSH
5721: LD_INT 1
5723: PPUSH
5724: CALL_OW 1
5728: ST_TO_ADDR
// enable ;
5729: ENABLE
// wait ( rand ( respawning_time_min , respawning_time_max ) ) ;
5730: LD_EXP 26
5734: PPUSH
5735: LD_EXP 27
5739: PPUSH
5740: CALL_OW 12
5744: PPUSH
5745: CALL_OW 67
// inqueue := Replace ( inqueue , aktresp , false ) ;
5749: LD_ADDR_LOC 5
5753: PUSH
5754: LD_LOC 5
5758: PPUSH
5759: LD_VAR 0 3
5763: PPUSH
5764: LD_INT 0
5766: PPUSH
5767: CALL_OW 1
5771: ST_TO_ADDR
// hc_name :=  ;
5772: LD_ADDR_OWVAR 26
5776: PUSH
5777: LD_STRING 
5779: ST_TO_ADDR
// hc_importance := 0 ;
5780: LD_ADDR_OWVAR 32
5784: PUSH
5785: LD_INT 0
5787: ST_TO_ADDR
// PrepareHuman ( 0 , 0 , skill_level div 2 ) ;
5788: LD_INT 0
5790: PPUSH
5791: LD_INT 0
5793: PPUSH
5794: LD_EXP 20
5798: PUSH
5799: LD_INT 2
5801: DIV
5802: PPUSH
5803: CALL_OW 380
// uc_nation := Side_Nations [ aktresp ] ;
5807: LD_ADDR_OWVAR 21
5811: PUSH
5812: LD_EXP 41
5816: PUSH
5817: LD_VAR 0 3
5821: ARRAY
5822: ST_TO_ADDR
// uc_side := aktresp ;
5823: LD_ADDR_OWVAR 20
5827: PUSH
5828: LD_VAR 0 3
5832: ST_TO_ADDR
// dep := dep [ Rand ( 1 , dep ) ] ;
5833: LD_ADDR_VAR 0 2
5837: PUSH
5838: LD_VAR 0 2
5842: PUSH
5843: LD_INT 1
5845: PPUSH
5846: LD_VAR 0 2
5850: PPUSH
5851: CALL_OW 12
5855: ARRAY
5856: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , GetX ( dep ) , GetY ( dep ) , 7 , true ) ;
5857: CALL_OW 44
5861: PPUSH
5862: LD_VAR 0 2
5866: PPUSH
5867: CALL_OW 250
5871: PPUSH
5872: LD_VAR 0 2
5876: PPUSH
5877: CALL_OW 251
5881: PPUSH
5882: LD_INT 7
5884: PPUSH
5885: LD_INT 1
5887: PPUSH
5888: CALL_OW 50
// end else
5892: GO 5895
// enable ;
5894: ENABLE
// end else
5895: GO 5898
// enable ;
5897: ENABLE
// end else
5898: GO 5901
// enable ;
5900: ENABLE
// end ; end_of_file
5901: PPOPN 3
5903: END
// function DisplayNames ; var i ; begin
5904: LD_INT 0
5906: PPUSH
5907: PPUSH
// for i in FilterAllUnits ( [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ) do
5908: LD_ADDR_VAR 0 2
5912: PUSH
5913: LD_INT 2
5915: PUSH
5916: LD_INT 30
5918: PUSH
5919: LD_INT 0
5921: PUSH
5922: EMPTY
5923: LIST
5924: LIST
5925: PUSH
5926: LD_INT 30
5928: PUSH
5929: LD_INT 1
5931: PUSH
5932: EMPTY
5933: LIST
5934: LIST
5935: PUSH
5936: EMPTY
5937: LIST
5938: LIST
5939: LIST
5940: PPUSH
5941: CALL_OW 69
5945: PUSH
5946: FOR_IN
5947: IFFALSE 5974
// SetBName ( i , @ & GetSide ( i ) ) ;
5949: LD_VAR 0 2
5953: PPUSH
5954: LD_STRING @
5956: PUSH
5957: LD_VAR 0 2
5961: PPUSH
5962: CALL_OW 255
5966: STR
5967: PPUSH
5968: CALL_OW 500
5972: GO 5946
5974: POP
5975: POP
// end ;
5976: LD_VAR 0 1
5980: RET
// on BuildingComplete ( b ) do DisplayNames ;
5981: CALL 5904 0 0
5985: PPOPN 1
5987: END
// on BuildingStarted ( b , h ) do DisplayNames ;
5988: CALL 5904 0 0
5992: PPOPN 2
5994: END
// on BuildingCaptured ( b , o , e ) do DisplayNames ;
5995: CALL 5904 0 0
5999: PPOPN 3
6001: END
// every 5 do
6002: GO 6004
6004: DISABLE
// DisplayNames ;
6005: CALL 5904 0 0
6009: END
// on UnitDestroyed ( j ) do var x , y , pos , dir ;
6010: LD_INT 0
6012: PPUSH
6013: PPUSH
6014: PPUSH
6015: PPUSH
// begin if getBType ( j ) in [ b_depot , b_warehouse ] then
6016: LD_VAR 0 1
6020: PPUSH
6021: CALL_OW 266
6025: PUSH
6026: LD_INT 0
6028: PUSH
6029: LD_INT 1
6031: PUSH
6032: EMPTY
6033: LIST
6034: LIST
6035: IN
6036: IFFALSE 6164
// begin pos := Side_Positions [ GetSide ( j ) ] ;
6038: LD_ADDR_VAR 0 4
6042: PUSH
6043: LD_EXP 40
6047: PUSH
6048: LD_VAR 0 1
6052: PPUSH
6053: CALL_OW 255
6057: ARRAY
6058: ST_TO_ADDR
// x := depot_def [ pos ] [ 1 ] ;
6059: LD_ADDR_VAR 0 2
6063: PUSH
6064: LD_EXP 45
6068: PUSH
6069: LD_VAR 0 4
6073: ARRAY
6074: PUSH
6075: LD_INT 1
6077: ARRAY
6078: ST_TO_ADDR
// y := depot_def [ pos ] [ 2 ] ;
6079: LD_ADDR_VAR 0 3
6083: PUSH
6084: LD_EXP 45
6088: PUSH
6089: LD_VAR 0 4
6093: ARRAY
6094: PUSH
6095: LD_INT 2
6097: ARRAY
6098: ST_TO_ADDR
// dir := depot_def [ pos ] [ 3 ] ;
6099: LD_ADDR_VAR 0 5
6103: PUSH
6104: LD_EXP 45
6108: PUSH
6109: LD_VAR 0 4
6113: ARRAY
6114: PUSH
6115: LD_INT 3
6117: ARRAY
6118: ST_TO_ADDR
// KillBattleFlag ( FindBattleFlag ( ShiftX ( x , dir , 10 ) , ShiftY ( y , dir , 10 ) ) ) ;
6119: LD_VAR 0 2
6123: PPUSH
6124: LD_VAR 0 5
6128: PPUSH
6129: LD_INT 10
6131: PPUSH
6132: CALL_OW 272
6136: PPUSH
6137: LD_VAR 0 3
6141: PPUSH
6142: LD_VAR 0 5
6146: PPUSH
6147: LD_INT 10
6149: PPUSH
6150: CALL_OW 273
6154: PPUSH
6155: CALL_OW 420
6159: PPUSH
6160: CALL_OW 419
// end ; end ; end_of_file
6164: PPOPN 5
6166: END
// export function init_win_condition ; begin
6167: LD_INT 0
6169: PPUSH
// case Game_Type of 1 , 2 :
6170: LD_EXP 1
6174: PUSH
6175: LD_INT 1
6177: DOUBLE
6178: EQUAL
6179: IFTRUE 6189
6181: LD_INT 2
6183: DOUBLE
6184: EQUAL
6185: IFTRUE 6189
6187: GO 6206
6189: POP
// if Team_Game then
6190: LD_EXP 44
6194: IFFALSE 6201
// enable ( 98 ) else
6196: LD_INT 98
6198: ENABLE_MARKED
6199: GO 6204
// enable ( 99 ) ; 3 :
6201: LD_INT 99
6203: ENABLE_MARKED
6204: GO 6231
6206: LD_INT 3
6208: DOUBLE
6209: EQUAL
6210: IFTRUE 6214
6212: GO 6230
6214: POP
// begin Wait ( 0 0$5 ) ;
6215: LD_INT 175
6217: PPUSH
6218: CALL_OW 67
// enable ( 99 ) ;
6222: LD_INT 99
6224: ENABLE_MARKED
// enable ( 100 ) ;
6225: LD_INT 100
6227: ENABLE_MARKED
// end ; end ;
6228: GO 6231
6230: POP
// end ;
6231: LD_VAR 0 1
6235: RET
// every 0 0$2 marked 98 do var win , i ;
6236: GO 6238
6238: DISABLE
6239: LD_INT 0
6241: PPUSH
6242: PPUSH
// begin if your_side then
6243: LD_OWVAR 2
6247: IFFALSE 6455
// if not FilterAllUnits ( [ [ f_side , your_side ] , [ f_or , [ f_type , unit_human ] , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) then
6249: LD_INT 22
6251: PUSH
6252: LD_OWVAR 2
6256: PUSH
6257: EMPTY
6258: LIST
6259: LIST
6260: PUSH
6261: LD_INT 2
6263: PUSH
6264: LD_INT 21
6266: PUSH
6267: LD_INT 1
6269: PUSH
6270: EMPTY
6271: LIST
6272: LIST
6273: PUSH
6274: LD_INT 30
6276: PUSH
6277: LD_INT 0
6279: PUSH
6280: EMPTY
6281: LIST
6282: LIST
6283: PUSH
6284: LD_INT 30
6286: PUSH
6287: LD_INT 1
6289: PUSH
6290: EMPTY
6291: LIST
6292: LIST
6293: PUSH
6294: EMPTY
6295: LIST
6296: LIST
6297: LIST
6298: LIST
6299: PUSH
6300: EMPTY
6301: LIST
6302: LIST
6303: PPUSH
6304: CALL_OW 69
6308: NOT
6309: IFFALSE 6326
// begin wait ( 0 0$3 ) ;
6311: LD_INT 105
6313: PPUSH
6314: CALL_OW 67
// YouLostInMultiplayer ;
6318: CALL_OW 107
// exit ;
6322: GO 6456
// end else
6324: GO 6455
// begin win := true ;
6326: LD_ADDR_VAR 0 1
6330: PUSH
6331: LD_INT 1
6333: ST_TO_ADDR
// for i = 1 to Side_positions do
6334: LD_ADDR_VAR 0 2
6338: PUSH
6339: DOUBLE
6340: LD_INT 1
6342: DEC
6343: ST_TO_ADDR
6344: LD_EXP 40
6348: PUSH
6349: FOR_TO
6350: IFFALSE 6434
// if Side_positions [ i ] and ( i <> your_side ) and MultiplayerSideAlive ( i ) then
6352: LD_EXP 40
6356: PUSH
6357: LD_VAR 0 2
6361: ARRAY
6362: PUSH
6363: LD_VAR 0 2
6367: PUSH
6368: LD_OWVAR 2
6372: NONEQUAL
6373: AND
6374: PUSH
6375: LD_VAR 0 2
6379: PPUSH
6380: CALL_OW 108
6384: AND
6385: IFFALSE 6432
// begin if not Side_Teams [ i ] or ( Side_Teams [ i ] <> Side_Teams [ your_side ] ) then
6387: LD_EXP 38
6391: PUSH
6392: LD_VAR 0 2
6396: ARRAY
6397: NOT
6398: PUSH
6399: LD_EXP 38
6403: PUSH
6404: LD_VAR 0 2
6408: ARRAY
6409: PUSH
6410: LD_EXP 38
6414: PUSH
6415: LD_OWVAR 2
6419: ARRAY
6420: NONEQUAL
6421: OR
6422: IFFALSE 6432
// win := false ;
6424: LD_ADDR_VAR 0 1
6428: PUSH
6429: LD_INT 0
6431: ST_TO_ADDR
// end ;
6432: GO 6349
6434: POP
6435: POP
// if win then
6436: LD_VAR 0 1
6440: IFFALSE 6455
// begin wait ( 0 0$3 ) ;
6442: LD_INT 105
6444: PPUSH
6445: CALL_OW 67
// YouWinInMultiplayer ;
6449: CALL_OW 106
// exit ;
6453: GO 6456
// end ; end ; enable ;
6455: ENABLE
// end ;
6456: PPOPN 2
6458: END
// every 0 0$3 marked 99 do var win , i ;
6459: GO 6461
6461: DISABLE
6462: LD_INT 0
6464: PPUSH
6465: PPUSH
// begin if not FilterAllUnits ( [ [ f_side , your_side ] , [ f_or , [ f_type , unit_human ] , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) then
6466: LD_INT 22
6468: PUSH
6469: LD_OWVAR 2
6473: PUSH
6474: EMPTY
6475: LIST
6476: LIST
6477: PUSH
6478: LD_INT 2
6480: PUSH
6481: LD_INT 21
6483: PUSH
6484: LD_INT 1
6486: PUSH
6487: EMPTY
6488: LIST
6489: LIST
6490: PUSH
6491: LD_INT 30
6493: PUSH
6494: LD_INT 0
6496: PUSH
6497: EMPTY
6498: LIST
6499: LIST
6500: PUSH
6501: LD_INT 30
6503: PUSH
6504: LD_INT 1
6506: PUSH
6507: EMPTY
6508: LIST
6509: LIST
6510: PUSH
6511: EMPTY
6512: LIST
6513: LIST
6514: LIST
6515: LIST
6516: PUSH
6517: EMPTY
6518: LIST
6519: LIST
6520: PPUSH
6521: CALL_OW 69
6525: NOT
6526: IFFALSE 6543
// begin wait ( 0 0$3 ) ;
6528: LD_INT 105
6530: PPUSH
6531: CALL_OW 67
// YouLostInMultiplayer ;
6535: CALL_OW 107
// exit ;
6539: GO 6653
// end else
6541: GO 6652
// begin win := true ;
6543: LD_ADDR_VAR 0 1
6547: PUSH
6548: LD_INT 1
6550: ST_TO_ADDR
// for i = 1 to Side_Positions do
6551: LD_ADDR_VAR 0 2
6555: PUSH
6556: DOUBLE
6557: LD_INT 1
6559: DEC
6560: ST_TO_ADDR
6561: LD_EXP 40
6565: PUSH
6566: FOR_TO
6567: IFFALSE 6631
// if Side_Positions [ i ] and ( i <> your_side ) and MultiplayerSideAlive ( i ) then
6569: LD_EXP 40
6573: PUSH
6574: LD_VAR 0 2
6578: ARRAY
6579: PUSH
6580: LD_VAR 0 2
6584: PUSH
6585: LD_OWVAR 2
6589: NONEQUAL
6590: AND
6591: PUSH
6592: LD_VAR 0 2
6596: PPUSH
6597: CALL_OW 108
6601: AND
6602: IFFALSE 6629
// if not AlliedSides ( i , your_side ) then
6604: LD_VAR 0 2
6608: PPUSH
6609: LD_OWVAR 2
6613: PPUSH
6614: CALL 6656 0 2
6618: NOT
6619: IFFALSE 6629
// win := false ;
6621: LD_ADDR_VAR 0 1
6625: PUSH
6626: LD_INT 0
6628: ST_TO_ADDR
6629: GO 6566
6631: POP
6632: POP
// if win then
6633: LD_VAR 0 1
6637: IFFALSE 6652
// begin wait ( 0 0$3 ) ;
6639: LD_INT 105
6641: PPUSH
6642: CALL_OW 67
// YouWinInMultiplayer ;
6646: CALL_OW 106
// exit ;
6650: GO 6653
// end ; end ; enable ;
6652: ENABLE
// end ;
6653: PPOPN 2
6655: END
// function AlliedSides ( i , j ) ; var vysledek ; begin
6656: LD_INT 0
6658: PPUSH
6659: PPUSH
// vysledek := false ;
6660: LD_ADDR_VAR 0 4
6664: PUSH
6665: LD_INT 0
6667: ST_TO_ADDR
// if ( GetAttitude ( i , j ) = att_friend ) and ( GetAttitude ( j , i ) = att_friend ) and GetAlliedVictory ( i ) and GetAlliedVictory ( j ) then
6668: LD_VAR 0 1
6672: PPUSH
6673: LD_VAR 0 2
6677: PPUSH
6678: CALL_OW 81
6682: PUSH
6683: LD_INT 1
6685: EQUAL
6686: PUSH
6687: LD_VAR 0 2
6691: PPUSH
6692: LD_VAR 0 1
6696: PPUSH
6697: CALL_OW 81
6701: PUSH
6702: LD_INT 1
6704: EQUAL
6705: AND
6706: PUSH
6707: LD_VAR 0 1
6711: PPUSH
6712: CALL_OW 83
6716: AND
6717: PUSH
6718: LD_VAR 0 2
6722: PPUSH
6723: CALL_OW 83
6727: AND
6728: IFFALSE 6738
// vysledek := true ;
6730: LD_ADDR_VAR 0 4
6734: PUSH
6735: LD_INT 1
6737: ST_TO_ADDR
// result := vysledek ;
6738: LD_ADDR_VAR 0 3
6742: PUSH
6743: LD_VAR 0 4
6747: ST_TO_ADDR
// end ;
6748: LD_VAR 0 3
6752: RET
// every 3 marked 100 do var side ;
6753: GO 6755
6755: DISABLE
6756: LD_INT 0
6758: PPUSH
// begin for side = 1 to Side_Positions do
6759: LD_ADDR_VAR 0 1
6763: PUSH
6764: DOUBLE
6765: LD_INT 1
6767: DEC
6768: ST_TO_ADDR
6769: LD_EXP 40
6773: PUSH
6774: FOR_TO
6775: IFFALSE 6813
// if Side_Positions [ side ] then
6777: LD_EXP 40
6781: PUSH
6782: LD_VAR 0 1
6786: ARRAY
6787: IFFALSE 6811
// if sib_mined [ side ] >= amount_of_siberit then
6789: LD_EXP 55
6793: PUSH
6794: LD_VAR 0 1
6798: ARRAY
6799: PUSH
6800: LD_EXP 25
6804: GREATEREQUAL
6805: IFFALSE 6811
// show_that_you_are_winner_or_looser ;
6807: CALL 6819 0 0
6811: GO 6774
6813: POP
6814: POP
// enable ;
6815: ENABLE
// end ;
6816: PPOPN 1
6818: END
// function show_that_you_are_winner_or_looser ; begin
6819: LD_INT 0
6821: PPUSH
// if sib_mined [ your_side ] >= amount_of_siberit then
6822: LD_EXP 55
6826: PUSH
6827: LD_OWVAR 2
6831: ARRAY
6832: PUSH
6833: LD_EXP 25
6837: GREATEREQUAL
6838: IFFALSE 6855
// begin wait ( 0 0$3 ) ;
6840: LD_INT 105
6842: PPUSH
6843: CALL_OW 67
// YouWinInMultiplayer ;
6847: CALL_OW 106
// exit ;
6851: GO 6868
// end else
6853: GO 6868
// begin wait ( 0 0$3 ) ;
6855: LD_INT 105
6857: PPUSH
6858: CALL_OW 67
// YouLostInMultiplayer ;
6862: CALL_OW 107
// exit ;
6866: GO 6868
// end ; end ; end_of_file
6868: LD_VAR 0 1
6872: RET
// every 10 do
6873: GO 6875
6875: DISABLE
// begin if not multiplayer then
6876: LD_OWVAR 4
6880: NOT
6881: IFFALSE 6885
// exit ;
6883: GO 6942
// if ( tick >= 100 ) then
6885: LD_OWVAR 1
6889: PUSH
6890: LD_INT 100
6892: GREATEREQUAL
6893: IFFALSE 6913
// if tick mod 20 = 0 then
6895: LD_OWVAR 1
6899: PUSH
6900: LD_INT 20
6902: MOD
6903: PUSH
6904: LD_INT 0
6906: EQUAL
6907: IFFALSE 6913
// MultiplayerCRC ;
6909: CALL_OW 361
// if ( tick >= 100 ) then
6913: LD_OWVAR 1
6917: PUSH
6918: LD_INT 100
6920: GREATEREQUAL
6921: IFFALSE 6941
// if tick mod 30 = 0 then
6923: LD_OWVAR 1
6927: PUSH
6928: LD_INT 30
6930: MOD
6931: PUSH
6932: LD_INT 0
6934: EQUAL
6935: IFFALSE 6941
// DebugLogAll ;
6937: CALL_OW 360
// enable ;
6941: ENABLE
// end ; end_of_file
6942: END
// export sib_mined ; every 0 0$1 trigger Game_Type = 3 do var name , side , base , pom , filter , output ;
6943: LD_EXP 1
6947: PUSH
6948: LD_INT 3
6950: EQUAL
6951: IFFALSE 7277
6953: GO 6955
6955: DISABLE
6956: LD_INT 0
6958: PPUSH
6959: PPUSH
6960: PPUSH
6961: PPUSH
6962: PPUSH
6963: PPUSH
// begin sib_mined := [ ] ;
6964: LD_ADDR_EXP 55
6968: PUSH
6969: EMPTY
6970: ST_TO_ADDR
// for side = 1 to Side_Positions do
6971: LD_ADDR_VAR 0 2
6975: PUSH
6976: DOUBLE
6977: LD_INT 1
6979: DEC
6980: ST_TO_ADDR
6981: LD_EXP 40
6985: PUSH
6986: FOR_TO
6987: IFFALSE 7143
// if Side_Positions [ side ] then
6989: LD_EXP 40
6993: PUSH
6994: LD_VAR 0 2
6998: ARRAY
6999: IFFALSE 7127
// begin filter := FilterAllUnits ( [ [ f_side , side ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) ;
7001: LD_ADDR_VAR 0 5
7005: PUSH
7006: LD_INT 22
7008: PUSH
7009: LD_VAR 0 2
7013: PUSH
7014: EMPTY
7015: LIST
7016: LIST
7017: PUSH
7018: LD_INT 2
7020: PUSH
7021: LD_INT 30
7023: PUSH
7024: LD_INT 0
7026: PUSH
7027: EMPTY
7028: LIST
7029: LIST
7030: PUSH
7031: LD_INT 30
7033: PUSH
7034: LD_INT 1
7036: PUSH
7037: EMPTY
7038: LIST
7039: LIST
7040: PUSH
7041: EMPTY
7042: LIST
7043: LIST
7044: LIST
7045: PUSH
7046: EMPTY
7047: LIST
7048: LIST
7049: PPUSH
7050: CALL_OW 69
7054: ST_TO_ADDR
// pom := 0 ;
7055: LD_ADDR_VAR 0 4
7059: PUSH
7060: LD_INT 0
7062: ST_TO_ADDR
// for base in filter do
7063: LD_ADDR_VAR 0 3
7067: PUSH
7068: LD_VAR 0 5
7072: PUSH
7073: FOR_IN
7074: IFFALSE 7107
// pom := pom + GetResourceType ( GetBase ( base ) , mat_siberit ) ;
7076: LD_ADDR_VAR 0 4
7080: PUSH
7081: LD_VAR 0 4
7085: PUSH
7086: LD_VAR 0 3
7090: PPUSH
7091: CALL_OW 274
7095: PPUSH
7096: LD_INT 3
7098: PPUSH
7099: CALL_OW 275
7103: PLUS
7104: ST_TO_ADDR
7105: GO 7073
7107: POP
7108: POP
// sib_mined := sib_mined ^ pom ;
7109: LD_ADDR_EXP 55
7113: PUSH
7114: LD_EXP 55
7118: PUSH
7119: LD_VAR 0 4
7123: ADD
7124: ST_TO_ADDR
// end else
7125: GO 7141
// sib_mined := sib_mined ^ 0 ;
7127: LD_ADDR_EXP 55
7131: PUSH
7132: LD_EXP 55
7136: PUSH
7137: LD_INT 0
7139: ADD
7140: ST_TO_ADDR
7141: GO 6986
7143: POP
7144: POP
// if not def_public_score then
7145: LD_EXP 15
7149: NOT
7150: IFFALSE 7253
// begin output := [ ] ;
7152: LD_ADDR_VAR 0 6
7156: PUSH
7157: EMPTY
7158: ST_TO_ADDR
// for side = 1 to Side_Positions do
7159: LD_ADDR_VAR 0 2
7163: PUSH
7164: DOUBLE
7165: LD_INT 1
7167: DEC
7168: ST_TO_ADDR
7169: LD_EXP 40
7173: PUSH
7174: FOR_TO
7175: IFFALSE 7239
// if Side_Positions [ side ] then
7177: LD_EXP 40
7181: PUSH
7182: LD_VAR 0 2
7186: ARRAY
7187: IFFALSE 7237
// output := output ^ ( mp_sides_players_names [ side ] & :  & sib_mined [ side ] & /  & amount_of_siberit ) ;
7189: LD_ADDR_VAR 0 6
7193: PUSH
7194: LD_VAR 0 6
7198: PUSH
7199: LD_OWVAR 19
7203: PUSH
7204: LD_VAR 0 2
7208: ARRAY
7209: PUSH
7210: LD_STRING : 
7212: STR
7213: PUSH
7214: LD_EXP 55
7218: PUSH
7219: LD_VAR 0 2
7223: ARRAY
7224: STR
7225: PUSH
7226: LD_STRING / 
7228: STR
7229: PUSH
7230: LD_EXP 25
7234: STR
7235: ADD
7236: ST_TO_ADDR
7237: GO 7174
7239: POP
7240: POP
// display_strings := output ;
7241: LD_ADDR_OWVAR 47
7245: PUSH
7246: LD_VAR 0 6
7250: ST_TO_ADDR
// end else
7251: GO 7276
// display_strings := [ #AlienBase-Mined , sib_mined [ Player_Side ] ] ;
7253: LD_ADDR_OWVAR 47
7257: PUSH
7258: LD_STRING #AlienBase-Mined
7260: PUSH
7261: LD_EXP 55
7265: PUSH
7266: LD_EXP 36
7270: ARRAY
7271: PUSH
7272: EMPTY
7273: LIST
7274: LIST
7275: ST_TO_ADDR
// enable ;
7276: ENABLE
// end ; end_of_file
7277: PPOPN 6
7279: END
// var strength , lastxwin , lastywin , lastxlost , lastylost ; function Update_Flags ; var un ; begin
7280: LD_INT 0
7282: PPUSH
7283: PPUSH
// for un in battle_flags_id do
7284: LD_ADDR_VAR 0 2
7288: PUSH
7289: LD_EXP 29
7293: PUSH
7294: FOR_IN
7295: IFFALSE 7370
// ChangeBattleFlagOptions ( un , [ [ bfo_defend_bonus_human , strength ] , [ bfo_defend_bonus_vehicle , strength div 2 ] , [ bfo_defend_bonus_building , strength div 5 ] , [ bfo_height , strength ] ] ) ;
7297: LD_VAR 0 2
7301: PPUSH
7302: LD_INT 1
7304: PUSH
7305: LD_LOC 6
7309: PUSH
7310: EMPTY
7311: LIST
7312: LIST
7313: PUSH
7314: LD_INT 2
7316: PUSH
7317: LD_LOC 6
7321: PUSH
7322: LD_INT 2
7324: DIV
7325: PUSH
7326: EMPTY
7327: LIST
7328: LIST
7329: PUSH
7330: LD_INT 3
7332: PUSH
7333: LD_LOC 6
7337: PUSH
7338: LD_INT 5
7340: DIV
7341: PUSH
7342: EMPTY
7343: LIST
7344: LIST
7345: PUSH
7346: LD_INT 20
7348: PUSH
7349: LD_LOC 6
7353: PUSH
7354: EMPTY
7355: LIST
7356: LIST
7357: PUSH
7358: EMPTY
7359: LIST
7360: LIST
7361: LIST
7362: LIST
7363: PPUSH
7364: CALL_OW 423
7368: GO 7294
7370: POP
7371: POP
// end ;
7372: LD_VAR 0 1
7376: RET
// every 0 0$0.1 do var un ;
7377: GO 7379
7379: DISABLE
7380: LD_INT 0
7382: PPUSH
// begin if not def_morale_flags then
7383: LD_EXP 10
7387: NOT
7388: IFFALSE 7392
// exit ;
7390: GO 7469
// if not morale_decreasing_time then
7392: LD_EXP 28
7396: NOT
7397: IFFALSE 7401
// exit ;
7399: GO 7469
// strength = 100 ;
7401: LD_ADDR_LOC 6
7405: PUSH
7406: LD_INT 100
7408: ST_TO_ADDR
// repeat wait ( morale_decreasing_time ) ;
7409: LD_EXP 28
7413: PPUSH
7414: CALL_OW 67
// strength := strength - 1 ;
7418: LD_ADDR_LOC 6
7422: PUSH
7423: LD_LOC 6
7427: PUSH
7428: LD_INT 1
7430: MINUS
7431: ST_TO_ADDR
// Update_Flags ;
7432: CALL 7280 0 0
// until not strength ;
7436: LD_LOC 6
7440: NOT
7441: IFFALSE 7409
// for un in battle_flags_id do
7443: LD_ADDR_VAR 0 1
7447: PUSH
7448: LD_EXP 29
7452: PUSH
7453: FOR_IN
7454: IFFALSE 7467
// KillBattleFlag ( un ) ;
7456: LD_VAR 0 1
7460: PPUSH
7461: CALL_OW 419
7465: GO 7453
7467: POP
7468: POP
// end ;
7469: PPOPN 1
7471: END
