// export you , ru , us , ar , ar_al , neutral , camp ; export cpu_list ; export ru_nation , us_nation , ar_nation ; export Burlak , MacMillan , Roth , Gossudarov ; export Petrosyan , Belkov , Kirilenkova , Gnyevko , Gladkov , Dolgov , Gleb , Kapitsova , Kuzmov , Kovalyuk , Scholtze , Karamazov , Titov , Oblukov , Kozlov , Petrovova , Bystrov , Lipshchin , Fadeev ; export Bobby , Brown , Cornell , Connie , Cyrus , Denis , Donaldson , Frank , Gary , Gladstone , Joan , Lisa , Peterson , Simms , VanHouten , Yamoko ; export Omar , OmarKilled , NegotiationOffered ; export Powell , Platonov ; export aliance_forces ; export finalize ; export prefered_control ; function prepare_us_units ; begin
   0: LD_INT 0
   2: PPUSH
// Powell := NewCharacter ( Powell ) ;
   3: LD_ADDR_EXP 54
   7: PUSH
   8: LD_STRING Powell
  10: PPUSH
  11: CALL_OW 25
  15: ST_TO_ADDR
// end ;
  16: LD_VAR 0 1
  20: RET
// function prepare_ru_units ; begin
  21: LD_INT 0
  23: PPUSH
// Platonov := NewCharacter ( Platonov ) ;
  24: LD_ADDR_EXP 55
  28: PUSH
  29: LD_STRING Platonov
  31: PPUSH
  32: CALL_OW 25
  36: ST_TO_ADDR
// end ;
  37: LD_VAR 0 1
  41: RET
// function prepare_ar_units ; begin
  42: LD_INT 0
  44: PPUSH
// OmarKilled := LoadVariable ( OmarKilled , false ) ;
  45: LD_ADDR_EXP 52
  49: PUSH
  50: LD_STRING OmarKilled
  52: PPUSH
  53: LD_INT 0
  55: PPUSH
  56: CALL_OW 30
  60: ST_TO_ADDR
// NegotiationOffered := LoadVariable ( NegotiationOffered , false ) ;
  61: LD_ADDR_EXP 53
  65: PUSH
  66: LD_STRING NegotiationOffered
  68: PPUSH
  69: LD_INT 0
  71: PPUSH
  72: CALL_OW 30
  76: ST_TO_ADDR
// if TestCharacters ( Omar ) and CheckCharacterSet ( Omar ) then
  77: LD_STRING Omar
  79: PPUSH
  80: CALL_OW 28
  84: PUSH
  85: LD_STRING Omar
  87: PPUSH
  88: CALL_OW 29
  92: AND
  93: IFFALSE 108
// Omar := CreateCharacter ( Omar ) ;
  95: LD_ADDR_EXP 51
  99: PUSH
 100: LD_STRING Omar
 102: PPUSH
 103: CALL_OW 34
 107: ST_TO_ADDR
// if Omar and NegotiationOffered then
 108: LD_EXP 51
 112: PUSH
 113: LD_EXP 53
 117: AND
 118: IFFALSE 125
// enable ( 2 ) else
 120: LD_INT 2
 122: ENABLE_MARKED
 123: GO 128
// enable ( 3 ) ;
 125: LD_INT 3
 127: ENABLE_MARKED
// SetSide ( Omar , ar_al ) ;
 128: LD_EXP 51
 132: PPUSH
 133: LD_EXP 5
 137: PPUSH
 138: CALL_OW 235
// end ;
 142: LD_VAR 0 1
 146: RET
// function prepare_al_units ; var un , count , i , nations , art_loaded , selected , aliance , pom_list , veh_cargo , veh_basic , veh_battle , vehicles , veh_list , JMM_car , Bur_car ; begin
 147: LD_INT 0
 149: PPUSH
 150: PPUSH
 151: PPUSH
 152: PPUSH
 153: PPUSH
 154: PPUSH
 155: PPUSH
 156: PPUSH
 157: PPUSH
 158: PPUSH
 159: PPUSH
 160: PPUSH
 161: PPUSH
 162: PPUSH
 163: PPUSH
 164: PPUSH
// nations := [ nation_american , nation_russian ] ;
 165: LD_ADDR_VAR 0 5
 169: PUSH
 170: LD_INT 1
 172: PUSH
 173: LD_INT 3
 175: PUSH
 176: EMPTY
 177: LIST
 178: LIST
 179: ST_TO_ADDR
// uc_side := you ;
 180: LD_ADDR_OWVAR 20
 184: PUSH
 185: LD_EXP 1
 189: ST_TO_ADDR
// aliance_forces := [ ] ;
 190: LD_ADDR_EXP 56
 194: PUSH
 195: EMPTY
 196: ST_TO_ADDR
// load_all_aliance ;
 197: CALL 2516 0 0
// aliance := [ ] ;
 201: LD_ADDR_VAR 0 8
 205: PUSH
 206: EMPTY
 207: ST_TO_ADDR
// Burlak := CreateCharacter ( Burlak ) ;
 208: LD_ADDR_EXP 12
 212: PUSH
 213: LD_STRING Burlak
 215: PPUSH
 216: CALL_OW 34
 220: ST_TO_ADDR
// aliance := aliance ^ Burlak ;
 221: LD_ADDR_VAR 0 8
 225: PUSH
 226: LD_VAR 0 8
 230: PUSH
 231: LD_EXP 12
 235: ADD
 236: ST_TO_ADDR
// if TestCharacters ( JMM ) and CheckCharacterSet ( JMM ) then
 237: LD_STRING JMM
 239: PPUSH
 240: CALL_OW 28
 244: PUSH
 245: LD_STRING JMM
 247: PPUSH
 248: CALL_OW 29
 252: AND
 253: IFFALSE 296
// begin MacMillan := CreateCharacter ( JMM ) ;
 255: LD_ADDR_EXP 13
 259: PUSH
 260: LD_STRING JMM
 262: PPUSH
 263: CALL_OW 34
 267: ST_TO_ADDR
// SetClass ( MacMillan , class_engineer ) ;
 268: LD_EXP 13
 272: PPUSH
 273: LD_INT 2
 275: PPUSH
 276: CALL_OW 336
// aliance := aliance ^ MacMillan ;
 280: LD_ADDR_VAR 0 8
 284: PUSH
 285: LD_VAR 0 8
 289: PUSH
 290: LD_EXP 13
 294: ADD
 295: ST_TO_ADDR
// end ; if TestCharacters ( Roth ) and CheckCharacterSet ( Roth ) then
 296: LD_STRING Roth
 298: PPUSH
 299: CALL_OW 28
 303: PUSH
 304: LD_STRING Roth
 306: PPUSH
 307: CALL_OW 29
 311: AND
 312: IFFALSE 355
// begin Roth := CreateCharacter ( Roth ) ;
 314: LD_ADDR_EXP 14
 318: PUSH
 319: LD_STRING Roth
 321: PPUSH
 322: CALL_OW 34
 326: ST_TO_ADDR
// SetClass ( Roth , class_scientistic ) ;
 327: LD_EXP 14
 331: PPUSH
 332: LD_INT 4
 334: PPUSH
 335: CALL_OW 336
// aliance := aliance ^ Roth ;
 339: LD_ADDR_VAR 0 8
 343: PUSH
 344: LD_VAR 0 8
 348: PUSH
 349: LD_EXP 14
 353: ADD
 354: ST_TO_ADDR
// end ; if TestCharacters ( Gossudarov ) and CheckCharacterSet ( Gossudarov ) then
 355: LD_STRING Gossudarov
 357: PPUSH
 358: CALL_OW 28
 362: PUSH
 363: LD_STRING Gossudarov
 365: PPUSH
 366: CALL_OW 29
 370: AND
 371: IFFALSE 414
// begin Gossudarov := CreateCharacter ( Gossudarov ) ;
 373: LD_ADDR_EXP 15
 377: PUSH
 378: LD_STRING Gossudarov
 380: PPUSH
 381: CALL_OW 34
 385: ST_TO_ADDR
// SetClass ( Gossudarov , class_scientistic ) ;
 386: LD_EXP 15
 390: PPUSH
 391: LD_INT 4
 393: PPUSH
 394: CALL_OW 336
// aliance := aliance ^ Gossudarov ;
 398: LD_ADDR_VAR 0 8
 402: PUSH
 403: LD_VAR 0 8
 407: PUSH
 408: LD_EXP 15
 412: ADD
 413: ST_TO_ADDR
// end ; selected := CharacterSelection (  , 12 - aliance , 12 - aliance , aliance ^ [ sel_not_hired , sel_changeable , sel_change_class ] ^ aliance_forces , [ class_soldier , class_engineer , class_mechanic , class_scientistic ] ) ;
 414: LD_ADDR_VAR 0 7
 418: PUSH
 419: LD_STRING 
 421: PPUSH
 422: LD_INT 12
 424: PUSH
 425: LD_VAR 0 8
 429: MINUS
 430: PPUSH
 431: LD_INT 12
 433: PUSH
 434: LD_VAR 0 8
 438: MINUS
 439: PPUSH
 440: LD_VAR 0 8
 444: PUSH
 445: LD_INT -2
 447: PUSH
 448: LD_INT -3
 450: PUSH
 451: LD_INT -5
 453: PUSH
 454: EMPTY
 455: LIST
 456: LIST
 457: LIST
 458: ADD
 459: PUSH
 460: LD_EXP 56
 464: ADD
 465: PPUSH
 466: LD_INT 1
 468: PUSH
 469: LD_INT 2
 471: PUSH
 472: LD_INT 3
 474: PUSH
 475: LD_INT 4
 477: PUSH
 478: EMPTY
 479: LIST
 480: LIST
 481: LIST
 482: LIST
 483: PPUSH
 484: CALL_OW 42
 488: ST_TO_ADDR
// aliance_forces := aliance ^ selected ;
 489: LD_ADDR_EXP 56
 493: PUSH
 494: LD_VAR 0 8
 498: PUSH
 499: LD_VAR 0 7
 503: ADD
 504: ST_TO_ADDR
// veh_cargo := [ [ nation_american , us_medium_tracked , engine_combustion , control_computer , us_cargo_bay ] , [ nation_american , us_medium_tracked , engine_combustion , control_manual , us_cargo_bay ] , [ nation_russian , ru_medium_tracked , engine_siberite , control_computer , ru_cargo_bay ] , [ nation_russian , ru_medium_tracked , engine_siberite , control_manual , ru_cargo_bay ] ] ;
 505: LD_ADDR_VAR 0 10
 509: PUSH
 510: LD_INT 1
 512: PUSH
 513: LD_INT 3
 515: PUSH
 516: LD_INT 1
 518: PUSH
 519: LD_INT 3
 521: PUSH
 522: LD_INT 12
 524: PUSH
 525: EMPTY
 526: LIST
 527: LIST
 528: LIST
 529: LIST
 530: LIST
 531: PUSH
 532: LD_INT 1
 534: PUSH
 535: LD_INT 3
 537: PUSH
 538: LD_INT 1
 540: PUSH
 541: LD_INT 1
 543: PUSH
 544: LD_INT 12
 546: PUSH
 547: EMPTY
 548: LIST
 549: LIST
 550: LIST
 551: LIST
 552: LIST
 553: PUSH
 554: LD_INT 3
 556: PUSH
 557: LD_INT 22
 559: PUSH
 560: LD_INT 3
 562: PUSH
 563: LD_INT 3
 565: PUSH
 566: LD_INT 51
 568: PUSH
 569: EMPTY
 570: LIST
 571: LIST
 572: LIST
 573: LIST
 574: LIST
 575: PUSH
 576: LD_INT 3
 578: PUSH
 579: LD_INT 22
 581: PUSH
 582: LD_INT 3
 584: PUSH
 585: LD_INT 1
 587: PUSH
 588: LD_INT 51
 590: PUSH
 591: EMPTY
 592: LIST
 593: LIST
 594: LIST
 595: LIST
 596: LIST
 597: PUSH
 598: EMPTY
 599: LIST
 600: LIST
 601: LIST
 602: LIST
 603: ST_TO_ADDR
// veh_basic := [ [ nation_american , us_medium_tracked , engine_combustion , control_computer , us_crane ] , [ nation_russian , ru_heavy_tracked , engine_siberite , control_manual , ru_bulldozer ] , ] ;
 604: LD_ADDR_VAR 0 11
 608: PUSH
 609: LD_INT 1
 611: PUSH
 612: LD_INT 3
 614: PUSH
 615: LD_INT 1
 617: PUSH
 618: LD_INT 3
 620: PUSH
 621: LD_INT 13
 623: PUSH
 624: EMPTY
 625: LIST
 626: LIST
 627: LIST
 628: LIST
 629: LIST
 630: PUSH
 631: LD_INT 3
 633: PUSH
 634: LD_INT 24
 636: PUSH
 637: LD_INT 3
 639: PUSH
 640: LD_INT 1
 642: PUSH
 643: LD_INT 53
 645: PUSH
 646: EMPTY
 647: LIST
 648: LIST
 649: LIST
 650: LIST
 651: LIST
 652: PUSH
 653: EMPTY
 654: LIST
 655: LIST
 656: ST_TO_ADDR
// veh_battle := [ [ nation_american , us_medium_tracked , engine_combustion , control_manual , us_rocket_launcher ] , [ nation_american , us_medium_tracked , engine_siberite , control_manual , us_laser ] , [ nation_american , us_heavy_tracked , engine_siberite , control_manual , us_heavy_gun ] , [ nation_american , us_morphling , engine_combustion , control_manual , us_rocket_launcher ] , [ nation_russian , ru_medium_wheeled , engine_combustion , control_manual , ru_rocket_launcher ] , [ nation_russian , ru_medium_tracked , engine_siberite , control_manual , ru_gun ] , [ nation_russian , ru_heavy_wheeled , engine_combustion , control_manual , ru_heavy_gun ] , [ nation_russian , ru_heavy_tracked , engine_siberite , control_manual , ru_heavy_gun ] , ] ;
 657: LD_ADDR_VAR 0 12
 661: PUSH
 662: LD_INT 1
 664: PUSH
 665: LD_INT 3
 667: PUSH
 668: LD_INT 1
 670: PUSH
 671: LD_INT 1
 673: PUSH
 674: LD_INT 7
 676: PUSH
 677: EMPTY
 678: LIST
 679: LIST
 680: LIST
 681: LIST
 682: LIST
 683: PUSH
 684: LD_INT 1
 686: PUSH
 687: LD_INT 3
 689: PUSH
 690: LD_INT 3
 692: PUSH
 693: LD_INT 1
 695: PUSH
 696: LD_INT 9
 698: PUSH
 699: EMPTY
 700: LIST
 701: LIST
 702: LIST
 703: LIST
 704: LIST
 705: PUSH
 706: LD_INT 1
 708: PUSH
 709: LD_INT 4
 711: PUSH
 712: LD_INT 3
 714: PUSH
 715: LD_INT 1
 717: PUSH
 718: LD_INT 6
 720: PUSH
 721: EMPTY
 722: LIST
 723: LIST
 724: LIST
 725: LIST
 726: LIST
 727: PUSH
 728: LD_INT 1
 730: PUSH
 731: LD_INT 5
 733: PUSH
 734: LD_INT 1
 736: PUSH
 737: LD_INT 1
 739: PUSH
 740: LD_INT 7
 742: PUSH
 743: EMPTY
 744: LIST
 745: LIST
 746: LIST
 747: LIST
 748: LIST
 749: PUSH
 750: LD_INT 3
 752: PUSH
 753: LD_INT 21
 755: PUSH
 756: LD_INT 1
 758: PUSH
 759: LD_INT 1
 761: PUSH
 762: LD_INT 45
 764: PUSH
 765: EMPTY
 766: LIST
 767: LIST
 768: LIST
 769: LIST
 770: LIST
 771: PUSH
 772: LD_INT 3
 774: PUSH
 775: LD_INT 22
 777: PUSH
 778: LD_INT 3
 780: PUSH
 781: LD_INT 1
 783: PUSH
 784: LD_INT 44
 786: PUSH
 787: EMPTY
 788: LIST
 789: LIST
 790: LIST
 791: LIST
 792: LIST
 793: PUSH
 794: LD_INT 3
 796: PUSH
 797: LD_INT 23
 799: PUSH
 800: LD_INT 1
 802: PUSH
 803: LD_INT 1
 805: PUSH
 806: LD_INT 46
 808: PUSH
 809: EMPTY
 810: LIST
 811: LIST
 812: LIST
 813: LIST
 814: LIST
 815: PUSH
 816: LD_INT 3
 818: PUSH
 819: LD_INT 24
 821: PUSH
 822: LD_INT 3
 824: PUSH
 825: LD_INT 1
 827: PUSH
 828: LD_INT 46
 830: PUSH
 831: EMPTY
 832: LIST
 833: LIST
 834: LIST
 835: LIST
 836: LIST
 837: PUSH
 838: EMPTY
 839: LIST
 840: LIST
 841: LIST
 842: LIST
 843: LIST
 844: LIST
 845: LIST
 846: LIST
 847: ST_TO_ADDR
// veh_list := [ ] ;
 848: LD_ADDR_VAR 0 14
 852: PUSH
 853: EMPTY
 854: ST_TO_ADDR
// count := 0 ;
 855: LD_ADDR_VAR 0 3
 859: PUSH
 860: LD_INT 0
 862: ST_TO_ADDR
// for i = 3 to 4 do
 863: LD_ADDR_VAR 0 4
 867: PUSH
 868: DOUBLE
 869: LD_INT 3
 871: DEC
 872: ST_TO_ADDR
 873: LD_INT 4
 875: PUSH
 876: FOR_TO
 877: IFFALSE 1062
// begin uc_direction := Rand ( 2 , 3 ) ;
 879: LD_ADDR_OWVAR 24
 883: PUSH
 884: LD_INT 2
 886: PPUSH
 887: LD_INT 3
 889: PPUSH
 890: CALL_OW 12
 894: ST_TO_ADDR
// un := veh_cargo [ Rand ( 1 , veh_cargo ) ] ;
 895: LD_ADDR_VAR 0 2
 899: PUSH
 900: LD_VAR 0 10
 904: PUSH
 905: LD_INT 1
 907: PPUSH
 908: LD_VAR 0 10
 912: PPUSH
 913: CALL_OW 12
 917: ARRAY
 918: ST_TO_ADDR
// uc_nation := un [ 1 ] ;
 919: LD_ADDR_OWVAR 21
 923: PUSH
 924: LD_VAR 0 2
 928: PUSH
 929: LD_INT 1
 931: ARRAY
 932: ST_TO_ADDR
// vc_chassis := un [ 2 ] ;
 933: LD_ADDR_OWVAR 37
 937: PUSH
 938: LD_VAR 0 2
 942: PUSH
 943: LD_INT 2
 945: ARRAY
 946: ST_TO_ADDR
// vc_engine := un [ 3 ] ;
 947: LD_ADDR_OWVAR 39
 951: PUSH
 952: LD_VAR 0 2
 956: PUSH
 957: LD_INT 3
 959: ARRAY
 960: ST_TO_ADDR
// vc_control := un [ 4 ] ;
 961: LD_ADDR_OWVAR 38
 965: PUSH
 966: LD_VAR 0 2
 970: PUSH
 971: LD_INT 4
 973: ARRAY
 974: ST_TO_ADDR
// vc_weapon := un [ 5 ] ;
 975: LD_ADDR_OWVAR 40
 979: PUSH
 980: LD_VAR 0 2
 984: PUSH
 985: LD_INT 5
 987: ARRAY
 988: ST_TO_ADDR
// veh_list := veh_list ^ CreateVehicle ;
 989: LD_ADDR_VAR 0 14
 993: PUSH
 994: LD_VAR 0 14
 998: PUSH
 999: CALL_OW 45
1003: ADD
1004: ST_TO_ADDR
// if un [ 4 ] = control_manual then
1005: LD_VAR 0 2
1009: PUSH
1010: LD_INT 4
1012: ARRAY
1013: PUSH
1014: LD_INT 1
1016: EQUAL
1017: IFFALSE 1033
// count := count + 1 ;
1019: LD_ADDR_VAR 0 3
1023: PUSH
1024: LD_VAR 0 3
1028: PUSH
1029: LD_INT 1
1031: PLUS
1032: ST_TO_ADDR
// SetCargo ( veh_list [ veh_list ] , mat_artefact , i * 10 ) ;
1033: LD_VAR 0 14
1037: PUSH
1038: LD_VAR 0 14
1042: ARRAY
1043: PPUSH
1044: LD_INT 4
1046: PPUSH
1047: LD_VAR 0 4
1051: PUSH
1052: LD_INT 10
1054: MUL
1055: PPUSH
1056: CALL_OW 290
// end ;
1060: GO 876
1062: POP
1063: POP
// for un in veh_basic do
1064: LD_ADDR_VAR 0 2
1068: PUSH
1069: LD_VAR 0 11
1073: PUSH
1074: FOR_IN
1075: IFFALSE 1209
// begin uc_direction := Rand ( 2 , 3 ) ;
1077: LD_ADDR_OWVAR 24
1081: PUSH
1082: LD_INT 2
1084: PPUSH
1085: LD_INT 3
1087: PPUSH
1088: CALL_OW 12
1092: ST_TO_ADDR
// uc_nation := un [ 1 ] ;
1093: LD_ADDR_OWVAR 21
1097: PUSH
1098: LD_VAR 0 2
1102: PUSH
1103: LD_INT 1
1105: ARRAY
1106: ST_TO_ADDR
// vc_chassis := un [ 2 ] ;
1107: LD_ADDR_OWVAR 37
1111: PUSH
1112: LD_VAR 0 2
1116: PUSH
1117: LD_INT 2
1119: ARRAY
1120: ST_TO_ADDR
// vc_engine := un [ 3 ] ;
1121: LD_ADDR_OWVAR 39
1125: PUSH
1126: LD_VAR 0 2
1130: PUSH
1131: LD_INT 3
1133: ARRAY
1134: ST_TO_ADDR
// vc_control := un [ 4 ] ;
1135: LD_ADDR_OWVAR 38
1139: PUSH
1140: LD_VAR 0 2
1144: PUSH
1145: LD_INT 4
1147: ARRAY
1148: ST_TO_ADDR
// vc_weapon := un [ 5 ] ;
1149: LD_ADDR_OWVAR 40
1153: PUSH
1154: LD_VAR 0 2
1158: PUSH
1159: LD_INT 5
1161: ARRAY
1162: ST_TO_ADDR
// veh_list := veh_list ^ CreateVehicle ;
1163: LD_ADDR_VAR 0 14
1167: PUSH
1168: LD_VAR 0 14
1172: PUSH
1173: CALL_OW 45
1177: ADD
1178: ST_TO_ADDR
// if un [ 4 ] = control_manual then
1179: LD_VAR 0 2
1183: PUSH
1184: LD_INT 4
1186: ARRAY
1187: PUSH
1188: LD_INT 1
1190: EQUAL
1191: IFFALSE 1207
// count := count + 1 ;
1193: LD_ADDR_VAR 0 3
1197: PUSH
1198: LD_VAR 0 3
1202: PUSH
1203: LD_INT 1
1205: PLUS
1206: ST_TO_ADDR
// end ;
1207: GO 1074
1209: POP
1210: POP
// count := aliance_forces - 2 - count ;
1211: LD_ADDR_VAR 0 3
1215: PUSH
1216: LD_EXP 56
1220: PUSH
1221: LD_INT 2
1223: MINUS
1224: PUSH
1225: LD_VAR 0 3
1229: MINUS
1230: ST_TO_ADDR
// for i = 1 to count do
1231: LD_ADDR_VAR 0 4
1235: PUSH
1236: DOUBLE
1237: LD_INT 1
1239: DEC
1240: ST_TO_ADDR
1241: LD_VAR 0 3
1245: PUSH
1246: FOR_TO
1247: IFFALSE 1377
// begin uc_direction := Rand ( 2 , 3 ) ;
1249: LD_ADDR_OWVAR 24
1253: PUSH
1254: LD_INT 2
1256: PPUSH
1257: LD_INT 3
1259: PPUSH
1260: CALL_OW 12
1264: ST_TO_ADDR
// un := veh_battle [ Rand ( 1 , veh_battle ) ] ;
1265: LD_ADDR_VAR 0 2
1269: PUSH
1270: LD_VAR 0 12
1274: PUSH
1275: LD_INT 1
1277: PPUSH
1278: LD_VAR 0 12
1282: PPUSH
1283: CALL_OW 12
1287: ARRAY
1288: ST_TO_ADDR
// uc_nation := un [ 1 ] ;
1289: LD_ADDR_OWVAR 21
1293: PUSH
1294: LD_VAR 0 2
1298: PUSH
1299: LD_INT 1
1301: ARRAY
1302: ST_TO_ADDR
// vc_chassis := un [ 2 ] ;
1303: LD_ADDR_OWVAR 37
1307: PUSH
1308: LD_VAR 0 2
1312: PUSH
1313: LD_INT 2
1315: ARRAY
1316: ST_TO_ADDR
// vc_engine := un [ 3 ] ;
1317: LD_ADDR_OWVAR 39
1321: PUSH
1322: LD_VAR 0 2
1326: PUSH
1327: LD_INT 3
1329: ARRAY
1330: ST_TO_ADDR
// vc_control := un [ 4 ] ;
1331: LD_ADDR_OWVAR 38
1335: PUSH
1336: LD_VAR 0 2
1340: PUSH
1341: LD_INT 4
1343: ARRAY
1344: ST_TO_ADDR
// vc_weapon := un [ 5 ] ;
1345: LD_ADDR_OWVAR 40
1349: PUSH
1350: LD_VAR 0 2
1354: PUSH
1355: LD_INT 5
1357: ARRAY
1358: ST_TO_ADDR
// veh_list := veh_list ^ CreateVehicle ;
1359: LD_ADDR_VAR 0 14
1363: PUSH
1364: LD_VAR 0 14
1368: PUSH
1369: CALL_OW 45
1373: ADD
1374: ST_TO_ADDR
// end ;
1375: GO 1246
1377: POP
1378: POP
// pom_list := aliance_forces diff [ MacMillan , Burlak ] ;
1379: LD_ADDR_VAR 0 9
1383: PUSH
1384: LD_EXP 56
1388: PUSH
1389: LD_EXP 13
1393: PUSH
1394: LD_EXP 12
1398: PUSH
1399: EMPTY
1400: LIST
1401: LIST
1402: DIFF
1403: ST_TO_ADDR
// i := 1 ;
1404: LD_ADDR_VAR 0 4
1408: PUSH
1409: LD_INT 1
1411: ST_TO_ADDR
// for un in veh_list do
1412: LD_ADDR_VAR 0 2
1416: PUSH
1417: LD_VAR 0 14
1421: PUSH
1422: FOR_IN
1423: IFFALSE 1524
// begin uc_direction := Rand ( 2 , 3 ) ;
1425: LD_ADDR_OWVAR 24
1429: PUSH
1430: LD_INT 2
1432: PPUSH
1433: LD_INT 3
1435: PPUSH
1436: CALL_OW 12
1440: ST_TO_ADDR
// if GetControl ( un ) = control_manual then
1441: LD_VAR 0 2
1445: PPUSH
1446: CALL_OW 263
1450: PUSH
1451: LD_INT 1
1453: EQUAL
1454: IFFALSE 1507
// begin PlaceHumanInUnit ( pom_list [ i ] , un ) ;
1456: LD_VAR 0 9
1460: PUSH
1461: LD_VAR 0 4
1465: ARRAY
1466: PPUSH
1467: LD_VAR 0 2
1471: PPUSH
1472: CALL_OW 52
// PlaceUnitArea ( un , starting_area , false ) ;
1476: LD_VAR 0 2
1480: PPUSH
1481: LD_INT 7
1483: PPUSH
1484: LD_INT 0
1486: PPUSH
1487: CALL_OW 49
// i := i + 1 ;
1491: LD_ADDR_VAR 0 4
1495: PUSH
1496: LD_VAR 0 4
1500: PUSH
1501: LD_INT 1
1503: PLUS
1504: ST_TO_ADDR
// end else
1505: GO 1522
// PlaceUnitArea ( un , starting_area , false ) ;
1507: LD_VAR 0 2
1511: PPUSH
1512: LD_INT 7
1514: PPUSH
1515: LD_INT 0
1517: PPUSH
1518: CALL_OW 49
// end ;
1522: GO 1422
1524: POP
1525: POP
// JMM_car := LoadVariable ( JMM_car , [ us_medium_tracked , engine_combustion , control_manual , us_cargo_bay ] ) ;
1526: LD_ADDR_VAR 0 15
1530: PUSH
1531: LD_STRING JMM_car
1533: PPUSH
1534: LD_INT 3
1536: PUSH
1537: LD_INT 1
1539: PUSH
1540: LD_INT 1
1542: PUSH
1543: LD_INT 12
1545: PUSH
1546: EMPTY
1547: LIST
1548: LIST
1549: LIST
1550: LIST
1551: PPUSH
1552: CALL_OW 30
1556: ST_TO_ADDR
// Bur_car := LoadVariable ( Bur_car , [ ru_medium_tracked , engine_siberite , control_manual , ru_rocket_launcher ] ) ;
1557: LD_ADDR_VAR 0 16
1561: PUSH
1562: LD_STRING Bur_car
1564: PPUSH
1565: LD_INT 22
1567: PUSH
1568: LD_INT 3
1570: PUSH
1571: LD_INT 1
1573: PUSH
1574: LD_INT 45
1576: PUSH
1577: EMPTY
1578: LIST
1579: LIST
1580: LIST
1581: LIST
1582: PPUSH
1583: CALL_OW 30
1587: ST_TO_ADDR
// if not ( ( JMM_car [ 4 ] in [ us_cargo_bay , ru_cargo_bay ] ) or ( Bur_car [ 4 ] in [ us_cargo_bay , ru_cargo_bay ] ) ) then
1588: LD_VAR 0 15
1592: PUSH
1593: LD_INT 4
1595: ARRAY
1596: PUSH
1597: LD_INT 12
1599: PUSH
1600: LD_INT 51
1602: PUSH
1603: EMPTY
1604: LIST
1605: LIST
1606: IN
1607: PUSH
1608: LD_VAR 0 16
1612: PUSH
1613: LD_INT 4
1615: ARRAY
1616: PUSH
1617: LD_INT 12
1619: PUSH
1620: LD_INT 51
1622: PUSH
1623: EMPTY
1624: LIST
1625: LIST
1626: IN
1627: OR
1628: NOT
1629: IFFALSE 1654
// JMM_car := [ us_medium_tracked , engine_combustion , control_manual , us_cargo_bay ] ;
1631: LD_ADDR_VAR 0 15
1635: PUSH
1636: LD_INT 3
1638: PUSH
1639: LD_INT 1
1641: PUSH
1642: LD_INT 1
1644: PUSH
1645: LD_INT 12
1647: PUSH
1648: EMPTY
1649: LIST
1650: LIST
1651: LIST
1652: LIST
1653: ST_TO_ADDR
// if JMM_car [ 1 ] in [ us_light_wheeled , us_medium_wheeled , us_medium_tracked , us_heavy_tracked , us_morphling ] then
1654: LD_VAR 0 15
1658: PUSH
1659: LD_INT 1
1661: ARRAY
1662: PUSH
1663: LD_INT 1
1665: PUSH
1666: LD_INT 2
1668: PUSH
1669: LD_INT 3
1671: PUSH
1672: LD_INT 4
1674: PUSH
1675: LD_INT 5
1677: PUSH
1678: EMPTY
1679: LIST
1680: LIST
1681: LIST
1682: LIST
1683: LIST
1684: IN
1685: IFFALSE 1697
// uc_nation := nation_american else
1687: LD_ADDR_OWVAR 21
1691: PUSH
1692: LD_INT 1
1694: ST_TO_ADDR
1695: GO 1705
// uc_nation := nation_russian ;
1697: LD_ADDR_OWVAR 21
1701: PUSH
1702: LD_INT 3
1704: ST_TO_ADDR
// uc_direction := Rand ( 2 , 3 ) ;
1705: LD_ADDR_OWVAR 24
1709: PUSH
1710: LD_INT 2
1712: PPUSH
1713: LD_INT 3
1715: PPUSH
1716: CALL_OW 12
1720: ST_TO_ADDR
// vc_chassis := JMM_car [ 1 ] ;
1721: LD_ADDR_OWVAR 37
1725: PUSH
1726: LD_VAR 0 15
1730: PUSH
1731: LD_INT 1
1733: ARRAY
1734: ST_TO_ADDR
// vc_engine := JMM_car [ 2 ] ;
1735: LD_ADDR_OWVAR 39
1739: PUSH
1740: LD_VAR 0 15
1744: PUSH
1745: LD_INT 2
1747: ARRAY
1748: ST_TO_ADDR
// vc_control := JMM_car [ 3 ] ;
1749: LD_ADDR_OWVAR 38
1753: PUSH
1754: LD_VAR 0 15
1758: PUSH
1759: LD_INT 3
1761: ARRAY
1762: ST_TO_ADDR
// vc_weapon := JMM_car [ 4 ] ;
1763: LD_ADDR_OWVAR 40
1767: PUSH
1768: LD_VAR 0 15
1772: PUSH
1773: LD_INT 4
1775: ARRAY
1776: ST_TO_ADDR
// un := CreateVehicle ;
1777: LD_ADDR_VAR 0 2
1781: PUSH
1782: CALL_OW 45
1786: ST_TO_ADDR
// art_loaded := false ;
1787: LD_ADDR_VAR 0 6
1791: PUSH
1792: LD_INT 0
1794: ST_TO_ADDR
// PlaceHumanInUnit ( MacMillan , un ) ;
1795: LD_EXP 13
1799: PPUSH
1800: LD_VAR 0 2
1804: PPUSH
1805: CALL_OW 52
// PlaceUnitArea ( un , jmm_starting , false ) ;
1809: LD_VAR 0 2
1813: PPUSH
1814: LD_INT 27
1816: PPUSH
1817: LD_INT 0
1819: PPUSH
1820: CALL_OW 49
// if GetWeapon ( un ) in [ us_cargo_bay , ru_cargo_bay ] then
1824: LD_VAR 0 2
1828: PPUSH
1829: CALL_OW 264
1833: PUSH
1834: LD_INT 12
1836: PUSH
1837: LD_INT 51
1839: PUSH
1840: EMPTY
1841: LIST
1842: LIST
1843: IN
1844: IFFALSE 1869
// begin SetCargo ( un , mat_artefact , 50 ) ;
1846: LD_VAR 0 2
1850: PPUSH
1851: LD_INT 4
1853: PPUSH
1854: LD_INT 50
1856: PPUSH
1857: CALL_OW 290
// art_loaded := true ;
1861: LD_ADDR_VAR 0 6
1865: PUSH
1866: LD_INT 1
1868: ST_TO_ADDR
// end ; if Bur_car [ 1 ] in [ ru_medium_wheeled , ru_medium_tracked , ru_heavy_wheeled , ru_heavy_tracked ] then
1869: LD_VAR 0 16
1873: PUSH
1874: LD_INT 1
1876: ARRAY
1877: PUSH
1878: LD_INT 21
1880: PUSH
1881: LD_INT 22
1883: PUSH
1884: LD_INT 23
1886: PUSH
1887: LD_INT 24
1889: PUSH
1890: EMPTY
1891: LIST
1892: LIST
1893: LIST
1894: LIST
1895: IN
1896: IFFALSE 1908
// uc_nation := nation_russian else
1898: LD_ADDR_OWVAR 21
1902: PUSH
1903: LD_INT 3
1905: ST_TO_ADDR
1906: GO 1916
// uc_nation := nation_american ;
1908: LD_ADDR_OWVAR 21
1912: PUSH
1913: LD_INT 1
1915: ST_TO_ADDR
// uc_direction := Rand ( 2 , 3 ) ;
1916: LD_ADDR_OWVAR 24
1920: PUSH
1921: LD_INT 2
1923: PPUSH
1924: LD_INT 3
1926: PPUSH
1927: CALL_OW 12
1931: ST_TO_ADDR
// vc_chassis := Bur_car [ 1 ] ;
1932: LD_ADDR_OWVAR 37
1936: PUSH
1937: LD_VAR 0 16
1941: PUSH
1942: LD_INT 1
1944: ARRAY
1945: ST_TO_ADDR
// vc_engine := Bur_car [ 2 ] ;
1946: LD_ADDR_OWVAR 39
1950: PUSH
1951: LD_VAR 0 16
1955: PUSH
1956: LD_INT 2
1958: ARRAY
1959: ST_TO_ADDR
// vc_control := Bur_car [ 3 ] ;
1960: LD_ADDR_OWVAR 38
1964: PUSH
1965: LD_VAR 0 16
1969: PUSH
1970: LD_INT 3
1972: ARRAY
1973: ST_TO_ADDR
// vc_weapon := Bur_car [ 4 ] ;
1974: LD_ADDR_OWVAR 40
1978: PUSH
1979: LD_VAR 0 16
1983: PUSH
1984: LD_INT 4
1986: ARRAY
1987: ST_TO_ADDR
// un := CreateVehicle ;
1988: LD_ADDR_VAR 0 2
1992: PUSH
1993: CALL_OW 45
1997: ST_TO_ADDR
// PlaceHumanInUnit ( Burlak , un ) ;
1998: LD_EXP 12
2002: PPUSH
2003: LD_VAR 0 2
2007: PPUSH
2008: CALL_OW 52
// PlaceUnitArea ( un , burlak_starting , false ) ;
2012: LD_VAR 0 2
2016: PPUSH
2017: LD_INT 10
2019: PPUSH
2020: LD_INT 0
2022: PPUSH
2023: CALL_OW 49
// if ( GetWeapon ( un ) in [ us_cargo_bay , ru_cargo_bay ] ) and not art_loaded then
2027: LD_VAR 0 2
2031: PPUSH
2032: CALL_OW 264
2036: PUSH
2037: LD_INT 12
2039: PUSH
2040: LD_INT 51
2042: PUSH
2043: EMPTY
2044: LIST
2045: LIST
2046: IN
2047: PUSH
2048: LD_VAR 0 6
2052: NOT
2053: AND
2054: IFFALSE 2071
// SetCargo ( un , mat_artefact , 50 ) ;
2056: LD_VAR 0 2
2060: PPUSH
2061: LD_INT 4
2063: PPUSH
2064: LD_INT 50
2066: PPUSH
2067: CALL_OW 290
// ComEnterUnit ( uss_ape , uss ) ;
2071: LD_INT 146
2073: PPUSH
2074: LD_INT 38
2076: PPUSH
2077: CALL_OW 120
// end ;
2081: LD_VAR 0 1
2085: RET
// function prepare_sides ; begin
2086: LD_INT 0
2088: PPUSH
// neutral := 0 ;
2089: LD_ADDR_EXP 6
2093: PUSH
2094: LD_INT 0
2096: ST_TO_ADDR
// you := 7 ;
2097: LD_ADDR_EXP 1
2101: PUSH
2102: LD_INT 7
2104: ST_TO_ADDR
// camp := 4 ;
2105: LD_ADDR_EXP 7
2109: PUSH
2110: LD_INT 4
2112: ST_TO_ADDR
// ru := 3 ;
2113: LD_ADDR_EXP 2
2117: PUSH
2118: LD_INT 3
2120: ST_TO_ADDR
// us := 1 ;
2121: LD_ADDR_EXP 3
2125: PUSH
2126: LD_INT 1
2128: ST_TO_ADDR
// ar := 2 ;
2129: LD_ADDR_EXP 4
2133: PUSH
2134: LD_INT 2
2136: ST_TO_ADDR
// ar_al := 5 ;
2137: LD_ADDR_EXP 5
2141: PUSH
2142: LD_INT 5
2144: ST_TO_ADDR
// cpu_list := [ us , ar , ru ] ;
2145: LD_ADDR_EXP 8
2149: PUSH
2150: LD_EXP 3
2154: PUSH
2155: LD_EXP 4
2159: PUSH
2160: LD_EXP 2
2164: PUSH
2165: EMPTY
2166: LIST
2167: LIST
2168: LIST
2169: ST_TO_ADDR
// ru_nation := nation_russian ;
2170: LD_ADDR_EXP 9
2174: PUSH
2175: LD_INT 3
2177: ST_TO_ADDR
// us_nation := nation_american ;
2178: LD_ADDR_EXP 10
2182: PUSH
2183: LD_INT 1
2185: ST_TO_ADDR
// ar_nation := nation_arabian ;
2186: LD_ADDR_EXP 11
2190: PUSH
2191: LD_INT 2
2193: ST_TO_ADDR
// finalize := 0 ;
2194: LD_ADDR_EXP 57
2198: PUSH
2199: LD_INT 0
2201: ST_TO_ADDR
// disable ( 1 ) ;
2202: LD_INT 1
2204: DISABLE_MARKED
// disable ( 2 ) ;
2205: LD_INT 2
2207: DISABLE_MARKED
// disable ( 3 ) ;
2208: LD_INT 3
2210: DISABLE_MARKED
// disable ( 4 ) ;
2211: LD_INT 4
2213: DISABLE_MARKED
// disable ( 5 ) ;
2214: LD_INT 5
2216: DISABLE_MARKED
// disable ( 24 ) ;
2217: LD_INT 24
2219: DISABLE_MARKED
// disable ( 25 ) ;
2220: LD_INT 25
2222: DISABLE_MARKED
// disable ( 26 ) ;
2223: LD_INT 26
2225: DISABLE_MARKED
// SetAttitude ( you , ru , att_enemy , true ) ;
2226: LD_EXP 1
2230: PPUSH
2231: LD_EXP 2
2235: PPUSH
2236: LD_INT 2
2238: PPUSH
2239: LD_INT 1
2241: PPUSH
2242: CALL_OW 80
// SetAttitude ( you , us , att_enemy , true ) ;
2246: LD_EXP 1
2250: PPUSH
2251: LD_EXP 3
2255: PPUSH
2256: LD_INT 2
2258: PPUSH
2259: LD_INT 1
2261: PPUSH
2262: CALL_OW 80
// SetAttitude ( you , ar , att_enemy , true ) ;
2266: LD_EXP 1
2270: PPUSH
2271: LD_EXP 4
2275: PPUSH
2276: LD_INT 2
2278: PPUSH
2279: LD_INT 1
2281: PPUSH
2282: CALL_OW 80
// SetAttitude ( you , neutral , att_neutral , true ) ;
2286: LD_EXP 1
2290: PPUSH
2291: LD_EXP 6
2295: PPUSH
2296: LD_INT 0
2298: PPUSH
2299: LD_INT 1
2301: PPUSH
2302: CALL_OW 80
// SetAttitude ( you , ar_al , att_enemy , true ) ;
2306: LD_EXP 1
2310: PPUSH
2311: LD_EXP 5
2315: PPUSH
2316: LD_INT 2
2318: PPUSH
2319: LD_INT 1
2321: PPUSH
2322: CALL_OW 80
// SetAttitude ( ru , us , att_enemy , true ) ;
2326: LD_EXP 2
2330: PPUSH
2331: LD_EXP 3
2335: PPUSH
2336: LD_INT 2
2338: PPUSH
2339: LD_INT 1
2341: PPUSH
2342: CALL_OW 80
// SetAttitude ( ru , ar , att_enemy , true ) ;
2346: LD_EXP 2
2350: PPUSH
2351: LD_EXP 4
2355: PPUSH
2356: LD_INT 2
2358: PPUSH
2359: LD_INT 1
2361: PPUSH
2362: CALL_OW 80
// SetAttitude ( us , ar , att_enemy , true ) ;
2366: LD_EXP 3
2370: PPUSH
2371: LD_EXP 4
2375: PPUSH
2376: LD_INT 2
2378: PPUSH
2379: LD_INT 1
2381: PPUSH
2382: CALL_OW 80
// SetAttitude ( ru , ar_al , att_enemy , true ) ;
2386: LD_EXP 2
2390: PPUSH
2391: LD_EXP 5
2395: PPUSH
2396: LD_INT 2
2398: PPUSH
2399: LD_INT 1
2401: PPUSH
2402: CALL_OW 80
// SetAttitude ( us , ar_al , att_enemy , true ) ;
2406: LD_EXP 3
2410: PPUSH
2411: LD_EXP 5
2415: PPUSH
2416: LD_INT 2
2418: PPUSH
2419: LD_INT 1
2421: PPUSH
2422: CALL_OW 80
// end ;
2426: LD_VAR 0 1
2430: RET
// starting begin RandomizeAll ;
2431: CALL_OW 11
// prepare_sides ;
2435: CALL 2086 0 0
// prepare_us_units ;
2439: CALL 0 0 0
// prepare_ru_units ;
2443: CALL 21 0 0
// prepare_ar_units ;
2447: CALL 42 0 0
// prepare_al_units ;
2451: CALL 147 0 0
// prepare_apemans ;
2455: CALL 6834 0 0
// create_russians ;
2459: CALL 4383 0 0
// create_americans ;
2463: CALL 5083 0 0
// create_arabians ;
2467: CALL 5808 0 0
// init_distribution ;
2471: CALL 24604 0 0
// init_defend ;
2475: CALL 17456 0 0
// init_attack ;
2479: CALL 19868 0 0
// init_keep_base ;
2483: CALL 30161 0 0
// init_research ;
2487: CALL 22201 0 0
// init_manufacture ;
2491: CALL 24951 0 0
// init_crates_loading ;
2495: CALL 30567 0 0
// init_crates_collecting ;
2499: CALL 31304 0 0
// init_alien_research ;
2503: CALL 34828 0 0
// init_sib_rocket ;
2507: CALL 33997 0 0
// starting_scene ;
2511: CALL 7066 0 0
// end ; end_of_file
2515: END
// export function load_all_aliance ; begin
2516: LD_INT 0
2518: PPUSH
// if TestCharacters ( Belkov ) and CheckCharacterSet ( Belkov ) then
2519: LD_STRING Belkov
2521: PPUSH
2522: CALL_OW 28
2526: PUSH
2527: LD_STRING Belkov
2529: PPUSH
2530: CALL_OW 29
2534: AND
2535: IFFALSE 2566
// begin Belkov := CreateCharacter ( Belkov ) ;
2537: LD_ADDR_EXP 17
2541: PUSH
2542: LD_STRING Belkov
2544: PPUSH
2545: CALL_OW 34
2549: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Belkov ;
2550: LD_ADDR_EXP 56
2554: PUSH
2555: LD_EXP 56
2559: PUSH
2560: LD_EXP 17
2564: ADD
2565: ST_TO_ADDR
// end ; if TestCharacters ( Petrosyan ) and CheckCharacterSet ( Petrosyan ) then
2566: LD_STRING Petrosyan
2568: PPUSH
2569: CALL_OW 28
2573: PUSH
2574: LD_STRING Petrosyan
2576: PPUSH
2577: CALL_OW 29
2581: AND
2582: IFFALSE 2613
// begin Petrosyan := CreateCharacter ( Petrosyan ) ;
2584: LD_ADDR_EXP 16
2588: PUSH
2589: LD_STRING Petrosyan
2591: PPUSH
2592: CALL_OW 34
2596: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Petrosyan ;
2597: LD_ADDR_EXP 56
2601: PUSH
2602: LD_EXP 56
2606: PUSH
2607: LD_EXP 16
2611: ADD
2612: ST_TO_ADDR
// end ; if TestCharacters ( Kirilenkova ) and CheckCharacterSet ( Kirilenkova ) then
2613: LD_STRING Kirilenkova
2615: PPUSH
2616: CALL_OW 28
2620: PUSH
2621: LD_STRING Kirilenkova
2623: PPUSH
2624: CALL_OW 29
2628: AND
2629: IFFALSE 2660
// begin Kirilenkova := CreateCharacter ( Kirilenkova ) ;
2631: LD_ADDR_EXP 18
2635: PUSH
2636: LD_STRING Kirilenkova
2638: PPUSH
2639: CALL_OW 34
2643: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Kirilenkova ;
2644: LD_ADDR_EXP 56
2648: PUSH
2649: LD_EXP 56
2653: PUSH
2654: LD_EXP 18
2658: ADD
2659: ST_TO_ADDR
// end ; if TestCharacters ( Gnyevko ) and CheckCharacterSet ( Gnyevko ) then
2660: LD_STRING Gnyevko
2662: PPUSH
2663: CALL_OW 28
2667: PUSH
2668: LD_STRING Gnyevko
2670: PPUSH
2671: CALL_OW 29
2675: AND
2676: IFFALSE 2707
// begin Gnyevko := CreateCharacter ( Gnyevko ) ;
2678: LD_ADDR_EXP 19
2682: PUSH
2683: LD_STRING Gnyevko
2685: PPUSH
2686: CALL_OW 34
2690: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Gnyevko ;
2691: LD_ADDR_EXP 56
2695: PUSH
2696: LD_EXP 56
2700: PUSH
2701: LD_EXP 19
2705: ADD
2706: ST_TO_ADDR
// end ; if TestCharacters ( Gladkov ) and CheckCharacterSet ( Gladkov ) then
2707: LD_STRING Gladkov
2709: PPUSH
2710: CALL_OW 28
2714: PUSH
2715: LD_STRING Gladkov
2717: PPUSH
2718: CALL_OW 29
2722: AND
2723: IFFALSE 2754
// begin Gladkov := CreateCharacter ( Gladkov ) ;
2725: LD_ADDR_EXP 20
2729: PUSH
2730: LD_STRING Gladkov
2732: PPUSH
2733: CALL_OW 34
2737: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Gladkov ;
2738: LD_ADDR_EXP 56
2742: PUSH
2743: LD_EXP 56
2747: PUSH
2748: LD_EXP 20
2752: ADD
2753: ST_TO_ADDR
// end ; if TestCharacters ( Dolgov ) and CheckCharacterSet ( Dolgov ) then
2754: LD_STRING Dolgov
2756: PPUSH
2757: CALL_OW 28
2761: PUSH
2762: LD_STRING Dolgov
2764: PPUSH
2765: CALL_OW 29
2769: AND
2770: IFFALSE 2801
// begin Dolgov := CreateCharacter ( Dolgov ) ;
2772: LD_ADDR_EXP 21
2776: PUSH
2777: LD_STRING Dolgov
2779: PPUSH
2780: CALL_OW 34
2784: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Dolgov ;
2785: LD_ADDR_EXP 56
2789: PUSH
2790: LD_EXP 56
2794: PUSH
2795: LD_EXP 21
2799: ADD
2800: ST_TO_ADDR
// end ; if TestCharacters ( Gleb ) and CheckCharacterSet ( Gleb ) then
2801: LD_STRING Gleb
2803: PPUSH
2804: CALL_OW 28
2808: PUSH
2809: LD_STRING Gleb
2811: PPUSH
2812: CALL_OW 29
2816: AND
2817: IFFALSE 2848
// begin Gleb := CreateCharacter ( Gleb ) ;
2819: LD_ADDR_EXP 22
2823: PUSH
2824: LD_STRING Gleb
2826: PPUSH
2827: CALL_OW 34
2831: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Gleb ;
2832: LD_ADDR_EXP 56
2836: PUSH
2837: LD_EXP 56
2841: PUSH
2842: LD_EXP 22
2846: ADD
2847: ST_TO_ADDR
// end ; if TestCharacters ( Kapitsova ) and CheckCharacterSet ( Kapitsova ) then
2848: LD_STRING Kapitsova
2850: PPUSH
2851: CALL_OW 28
2855: PUSH
2856: LD_STRING Kapitsova
2858: PPUSH
2859: CALL_OW 29
2863: AND
2864: IFFALSE 2895
// begin Kapitsova := CreateCharacter ( Kapitsova ) ;
2866: LD_ADDR_EXP 23
2870: PUSH
2871: LD_STRING Kapitsova
2873: PPUSH
2874: CALL_OW 34
2878: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Kapitsova ;
2879: LD_ADDR_EXP 56
2883: PUSH
2884: LD_EXP 56
2888: PUSH
2889: LD_EXP 23
2893: ADD
2894: ST_TO_ADDR
// end ; if TestCharacters ( Kuzmov ) and CheckCharacterSet ( Kuzmov ) then
2895: LD_STRING Kuzmov
2897: PPUSH
2898: CALL_OW 28
2902: PUSH
2903: LD_STRING Kuzmov
2905: PPUSH
2906: CALL_OW 29
2910: AND
2911: IFFALSE 2942
// begin Kuzmov := CreateCharacter ( Kuzmov ) ;
2913: LD_ADDR_EXP 24
2917: PUSH
2918: LD_STRING Kuzmov
2920: PPUSH
2921: CALL_OW 34
2925: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Kuzmov ;
2926: LD_ADDR_EXP 56
2930: PUSH
2931: LD_EXP 56
2935: PUSH
2936: LD_EXP 24
2940: ADD
2941: ST_TO_ADDR
// end ; if TestCharacters ( Kovalyuk ) and CheckCharacterSet ( Kovalyuk ) then
2942: LD_STRING Kovalyuk
2944: PPUSH
2945: CALL_OW 28
2949: PUSH
2950: LD_STRING Kovalyuk
2952: PPUSH
2953: CALL_OW 29
2957: AND
2958: IFFALSE 2989
// begin Kovalyuk := CreateCharacter ( Kovalyuk ) ;
2960: LD_ADDR_EXP 25
2964: PUSH
2965: LD_STRING Kovalyuk
2967: PPUSH
2968: CALL_OW 34
2972: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Kovalyuk ;
2973: LD_ADDR_EXP 56
2977: PUSH
2978: LD_EXP 56
2982: PUSH
2983: LD_EXP 25
2987: ADD
2988: ST_TO_ADDR
// end ; if TestCharacters ( Scholtze ) and CheckCharacterSet ( Scholtze ) then
2989: LD_STRING Scholtze
2991: PPUSH
2992: CALL_OW 28
2996: PUSH
2997: LD_STRING Scholtze
2999: PPUSH
3000: CALL_OW 29
3004: AND
3005: IFFALSE 3036
// begin Scholtze := CreateCharacter ( Scholtze ) ;
3007: LD_ADDR_EXP 26
3011: PUSH
3012: LD_STRING Scholtze
3014: PPUSH
3015: CALL_OW 34
3019: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Scholtze ;
3020: LD_ADDR_EXP 56
3024: PUSH
3025: LD_EXP 56
3029: PUSH
3030: LD_EXP 26
3034: ADD
3035: ST_TO_ADDR
// end ; if TestCharacters ( Karamazov ) and CheckCharacterSet ( Karamazov ) then
3036: LD_STRING Karamazov
3038: PPUSH
3039: CALL_OW 28
3043: PUSH
3044: LD_STRING Karamazov
3046: PPUSH
3047: CALL_OW 29
3051: AND
3052: IFFALSE 3083
// begin Karamazov := CreateCharacter ( Karamazov ) ;
3054: LD_ADDR_EXP 27
3058: PUSH
3059: LD_STRING Karamazov
3061: PPUSH
3062: CALL_OW 34
3066: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Karamazov ;
3067: LD_ADDR_EXP 56
3071: PUSH
3072: LD_EXP 56
3076: PUSH
3077: LD_EXP 27
3081: ADD
3082: ST_TO_ADDR
// end ; if TestCharacters ( Titov ) and CheckCharacterSet ( Titov ) then
3083: LD_STRING Titov
3085: PPUSH
3086: CALL_OW 28
3090: PUSH
3091: LD_STRING Titov
3093: PPUSH
3094: CALL_OW 29
3098: AND
3099: IFFALSE 3130
// begin Titov := CreateCharacter ( Titov ) ;
3101: LD_ADDR_EXP 28
3105: PUSH
3106: LD_STRING Titov
3108: PPUSH
3109: CALL_OW 34
3113: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Titov ;
3114: LD_ADDR_EXP 56
3118: PUSH
3119: LD_EXP 56
3123: PUSH
3124: LD_EXP 28
3128: ADD
3129: ST_TO_ADDR
// end ; if TestCharacters ( Oblukov ) and CheckCharacterSet ( Oblukov ) then
3130: LD_STRING Oblukov
3132: PPUSH
3133: CALL_OW 28
3137: PUSH
3138: LD_STRING Oblukov
3140: PPUSH
3141: CALL_OW 29
3145: AND
3146: IFFALSE 3177
// begin Oblukov := CreateCharacter ( Oblukov ) ;
3148: LD_ADDR_EXP 29
3152: PUSH
3153: LD_STRING Oblukov
3155: PPUSH
3156: CALL_OW 34
3160: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Oblukov ;
3161: LD_ADDR_EXP 56
3165: PUSH
3166: LD_EXP 56
3170: PUSH
3171: LD_EXP 29
3175: ADD
3176: ST_TO_ADDR
// end ; if TestCharacters ( Kozlov ) and CheckCharacterSet ( Kozlov ) then
3177: LD_STRING Kozlov
3179: PPUSH
3180: CALL_OW 28
3184: PUSH
3185: LD_STRING Kozlov
3187: PPUSH
3188: CALL_OW 29
3192: AND
3193: IFFALSE 3224
// begin Kozlov := CreateCharacter ( Kozlov ) ;
3195: LD_ADDR_EXP 30
3199: PUSH
3200: LD_STRING Kozlov
3202: PPUSH
3203: CALL_OW 34
3207: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Kozlov ;
3208: LD_ADDR_EXP 56
3212: PUSH
3213: LD_EXP 56
3217: PUSH
3218: LD_EXP 30
3222: ADD
3223: ST_TO_ADDR
// end ; if TestCharacters ( Petrovova ) and CheckCharacterSet ( Petrovova ) then
3224: LD_STRING Petrovova
3226: PPUSH
3227: CALL_OW 28
3231: PUSH
3232: LD_STRING Petrovova
3234: PPUSH
3235: CALL_OW 29
3239: AND
3240: IFFALSE 3271
// begin Petrovova := CreateCharacter ( Petrovova ) ;
3242: LD_ADDR_EXP 31
3246: PUSH
3247: LD_STRING Petrovova
3249: PPUSH
3250: CALL_OW 34
3254: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Petrovova ;
3255: LD_ADDR_EXP 56
3259: PUSH
3260: LD_EXP 56
3264: PUSH
3265: LD_EXP 31
3269: ADD
3270: ST_TO_ADDR
// end ; if TestCharacters ( Bystrov ) and CheckCharacterSet ( Bystrov ) then
3271: LD_STRING Bystrov
3273: PPUSH
3274: CALL_OW 28
3278: PUSH
3279: LD_STRING Bystrov
3281: PPUSH
3282: CALL_OW 29
3286: AND
3287: IFFALSE 3318
// begin Bystrov := CreateCharacter ( Bystrov ) ;
3289: LD_ADDR_EXP 32
3293: PUSH
3294: LD_STRING Bystrov
3296: PPUSH
3297: CALL_OW 34
3301: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Bystrov ;
3302: LD_ADDR_EXP 56
3306: PUSH
3307: LD_EXP 56
3311: PUSH
3312: LD_EXP 32
3316: ADD
3317: ST_TO_ADDR
// end ; if TestCharacters ( Lipshchin ) and CheckCharacterSet ( Lipshchin ) then
3318: LD_STRING Lipshchin
3320: PPUSH
3321: CALL_OW 28
3325: PUSH
3326: LD_STRING Lipshchin
3328: PPUSH
3329: CALL_OW 29
3333: AND
3334: IFFALSE 3365
// begin Lipshchin := CreateCharacter ( Lipshchin ) ;
3336: LD_ADDR_EXP 33
3340: PUSH
3341: LD_STRING Lipshchin
3343: PPUSH
3344: CALL_OW 34
3348: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Lipshchin ;
3349: LD_ADDR_EXP 56
3353: PUSH
3354: LD_EXP 56
3358: PUSH
3359: LD_EXP 33
3363: ADD
3364: ST_TO_ADDR
// end ; if TestCharacters ( Fadeev ) and CheckCharacterSet ( Fadeev ) then
3365: LD_STRING Fadeev
3367: PPUSH
3368: CALL_OW 28
3372: PUSH
3373: LD_STRING Fadeev
3375: PPUSH
3376: CALL_OW 29
3380: AND
3381: IFFALSE 3412
// begin Fadeev := CreateCharacter ( Fadeev ) ;
3383: LD_ADDR_EXP 34
3387: PUSH
3388: LD_STRING Fadeev
3390: PPUSH
3391: CALL_OW 34
3395: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Fadeev ;
3396: LD_ADDR_EXP 56
3400: PUSH
3401: LD_EXP 56
3405: PUSH
3406: LD_EXP 34
3410: ADD
3411: ST_TO_ADDR
// end ; if TestCharacters ( Bobby ) and CheckCharacterSet ( Bobby ) then
3412: LD_STRING Bobby
3414: PPUSH
3415: CALL_OW 28
3419: PUSH
3420: LD_STRING Bobby
3422: PPUSH
3423: CALL_OW 29
3427: AND
3428: IFFALSE 3459
// begin Bobby := CreateCharacter ( Bobby ) ;
3430: LD_ADDR_EXP 35
3434: PUSH
3435: LD_STRING Bobby
3437: PPUSH
3438: CALL_OW 34
3442: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Bobby ;
3443: LD_ADDR_EXP 56
3447: PUSH
3448: LD_EXP 56
3452: PUSH
3453: LD_EXP 35
3457: ADD
3458: ST_TO_ADDR
// end ; if TestCharacters ( Brown ) and CheckCharacterSet ( Brown ) then
3459: LD_STRING Brown
3461: PPUSH
3462: CALL_OW 28
3466: PUSH
3467: LD_STRING Brown
3469: PPUSH
3470: CALL_OW 29
3474: AND
3475: IFFALSE 3506
// begin Brown := CreateCharacter ( Brown ) ;
3477: LD_ADDR_EXP 36
3481: PUSH
3482: LD_STRING Brown
3484: PPUSH
3485: CALL_OW 34
3489: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Brown ;
3490: LD_ADDR_EXP 56
3494: PUSH
3495: LD_EXP 56
3499: PUSH
3500: LD_EXP 36
3504: ADD
3505: ST_TO_ADDR
// end ; if TestCharacters ( Cornell ) and CheckCharacterSet ( Cornell ) then
3506: LD_STRING Cornell
3508: PPUSH
3509: CALL_OW 28
3513: PUSH
3514: LD_STRING Cornell
3516: PPUSH
3517: CALL_OW 29
3521: AND
3522: IFFALSE 3553
// begin Cornell := CreateCharacter ( Cornell ) ;
3524: LD_ADDR_EXP 37
3528: PUSH
3529: LD_STRING Cornell
3531: PPUSH
3532: CALL_OW 34
3536: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Cornell ;
3537: LD_ADDR_EXP 56
3541: PUSH
3542: LD_EXP 56
3546: PUSH
3547: LD_EXP 37
3551: ADD
3552: ST_TO_ADDR
// end ; if TestCharacters ( Connie ) and CheckCharacterSet ( Connie ) then
3553: LD_STRING Connie
3555: PPUSH
3556: CALL_OW 28
3560: PUSH
3561: LD_STRING Connie
3563: PPUSH
3564: CALL_OW 29
3568: AND
3569: IFFALSE 3600
// begin Connie := CreateCharacter ( Connie ) ;
3571: LD_ADDR_EXP 38
3575: PUSH
3576: LD_STRING Connie
3578: PPUSH
3579: CALL_OW 34
3583: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Connie ;
3584: LD_ADDR_EXP 56
3588: PUSH
3589: LD_EXP 56
3593: PUSH
3594: LD_EXP 38
3598: ADD
3599: ST_TO_ADDR
// end ; if TestCharacters ( Cyrus ) and CheckCharacterSet ( Cyrus ) then
3600: LD_STRING Cyrus
3602: PPUSH
3603: CALL_OW 28
3607: PUSH
3608: LD_STRING Cyrus
3610: PPUSH
3611: CALL_OW 29
3615: AND
3616: IFFALSE 3647
// begin Cyrus := CreateCharacter ( Cyrus ) ;
3618: LD_ADDR_EXP 39
3622: PUSH
3623: LD_STRING Cyrus
3625: PPUSH
3626: CALL_OW 34
3630: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Cyrus ;
3631: LD_ADDR_EXP 56
3635: PUSH
3636: LD_EXP 56
3640: PUSH
3641: LD_EXP 39
3645: ADD
3646: ST_TO_ADDR
// end ; if TestCharacters ( Denis ) and CheckCharacterSet ( Denis ) then
3647: LD_STRING Denis
3649: PPUSH
3650: CALL_OW 28
3654: PUSH
3655: LD_STRING Denis
3657: PPUSH
3658: CALL_OW 29
3662: AND
3663: IFFALSE 3694
// begin Denis := CreateCharacter ( Denis ) ;
3665: LD_ADDR_EXP 40
3669: PUSH
3670: LD_STRING Denis
3672: PPUSH
3673: CALL_OW 34
3677: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Denis ;
3678: LD_ADDR_EXP 56
3682: PUSH
3683: LD_EXP 56
3687: PUSH
3688: LD_EXP 40
3692: ADD
3693: ST_TO_ADDR
// end ; if TestCharacters ( Donaldson ) and CheckCharacterSet ( Donaldson ) then
3694: LD_STRING Donaldson
3696: PPUSH
3697: CALL_OW 28
3701: PUSH
3702: LD_STRING Donaldson
3704: PPUSH
3705: CALL_OW 29
3709: AND
3710: IFFALSE 3741
// begin Donaldson := CreateCharacter ( Donaldson ) ;
3712: LD_ADDR_EXP 41
3716: PUSH
3717: LD_STRING Donaldson
3719: PPUSH
3720: CALL_OW 34
3724: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Donaldson ;
3725: LD_ADDR_EXP 56
3729: PUSH
3730: LD_EXP 56
3734: PUSH
3735: LD_EXP 41
3739: ADD
3740: ST_TO_ADDR
// end ; if TestCharacters ( Frank ) and CheckCharacterSet ( Frank ) then
3741: LD_STRING Frank
3743: PPUSH
3744: CALL_OW 28
3748: PUSH
3749: LD_STRING Frank
3751: PPUSH
3752: CALL_OW 29
3756: AND
3757: IFFALSE 3788
// begin Frank := CreateCharacter ( Frank ) ;
3759: LD_ADDR_EXP 42
3763: PUSH
3764: LD_STRING Frank
3766: PPUSH
3767: CALL_OW 34
3771: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Frank ;
3772: LD_ADDR_EXP 56
3776: PUSH
3777: LD_EXP 56
3781: PUSH
3782: LD_EXP 42
3786: ADD
3787: ST_TO_ADDR
// end ; if TestCharacters ( Gary ) and CheckCharacterSet ( Gary ) then
3788: LD_STRING Gary
3790: PPUSH
3791: CALL_OW 28
3795: PUSH
3796: LD_STRING Gary
3798: PPUSH
3799: CALL_OW 29
3803: AND
3804: IFFALSE 3835
// begin Gary := CreateCharacter ( Gary ) ;
3806: LD_ADDR_EXP 43
3810: PUSH
3811: LD_STRING Gary
3813: PPUSH
3814: CALL_OW 34
3818: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Gary ;
3819: LD_ADDR_EXP 56
3823: PUSH
3824: LD_EXP 56
3828: PUSH
3829: LD_EXP 43
3833: ADD
3834: ST_TO_ADDR
// end ; if TestCharacters ( Gladstone ) and CheckCharacterSet ( Gladstone ) then
3835: LD_STRING Gladstone
3837: PPUSH
3838: CALL_OW 28
3842: PUSH
3843: LD_STRING Gladstone
3845: PPUSH
3846: CALL_OW 29
3850: AND
3851: IFFALSE 3882
// begin Gladstone := CreateCharacter ( Gladstone ) ;
3853: LD_ADDR_EXP 44
3857: PUSH
3858: LD_STRING Gladstone
3860: PPUSH
3861: CALL_OW 34
3865: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Gladstone ;
3866: LD_ADDR_EXP 56
3870: PUSH
3871: LD_EXP 56
3875: PUSH
3876: LD_EXP 44
3880: ADD
3881: ST_TO_ADDR
// end ; if TestCharacters ( Joan ) and CheckCharacterSet ( Joan ) then
3882: LD_STRING Joan
3884: PPUSH
3885: CALL_OW 28
3889: PUSH
3890: LD_STRING Joan
3892: PPUSH
3893: CALL_OW 29
3897: AND
3898: IFFALSE 3929
// begin Joan := CreateCharacter ( Joan ) ;
3900: LD_ADDR_EXP 45
3904: PUSH
3905: LD_STRING Joan
3907: PPUSH
3908: CALL_OW 34
3912: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Joan ;
3913: LD_ADDR_EXP 56
3917: PUSH
3918: LD_EXP 56
3922: PUSH
3923: LD_EXP 45
3927: ADD
3928: ST_TO_ADDR
// end ; if TestCharacters ( Lisa ) and CheckCharacterSet ( Lisa ) then
3929: LD_STRING Lisa
3931: PPUSH
3932: CALL_OW 28
3936: PUSH
3937: LD_STRING Lisa
3939: PPUSH
3940: CALL_OW 29
3944: AND
3945: IFFALSE 3976
// begin Lisa := CreateCharacter ( Lisa ) ;
3947: LD_ADDR_EXP 46
3951: PUSH
3952: LD_STRING Lisa
3954: PPUSH
3955: CALL_OW 34
3959: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Lisa ;
3960: LD_ADDR_EXP 56
3964: PUSH
3965: LD_EXP 56
3969: PUSH
3970: LD_EXP 46
3974: ADD
3975: ST_TO_ADDR
// end ; if TestCharacters ( Peterson ) and CheckCharacterSet ( Peterson ) then
3976: LD_STRING Peterson
3978: PPUSH
3979: CALL_OW 28
3983: PUSH
3984: LD_STRING Peterson
3986: PPUSH
3987: CALL_OW 29
3991: AND
3992: IFFALSE 4023
// begin Peterson := CreateCharacter ( Peterson ) ;
3994: LD_ADDR_EXP 47
3998: PUSH
3999: LD_STRING Peterson
4001: PPUSH
4002: CALL_OW 34
4006: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Peterson ;
4007: LD_ADDR_EXP 56
4011: PUSH
4012: LD_EXP 56
4016: PUSH
4017: LD_EXP 47
4021: ADD
4022: ST_TO_ADDR
// end ; if TestCharacters ( Simms ) and CheckCharacterSet ( Simms ) then
4023: LD_STRING Simms
4025: PPUSH
4026: CALL_OW 28
4030: PUSH
4031: LD_STRING Simms
4033: PPUSH
4034: CALL_OW 29
4038: AND
4039: IFFALSE 4070
// begin Simms := CreateCharacter ( Simms ) ;
4041: LD_ADDR_EXP 48
4045: PUSH
4046: LD_STRING Simms
4048: PPUSH
4049: CALL_OW 34
4053: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Simms ;
4054: LD_ADDR_EXP 56
4058: PUSH
4059: LD_EXP 56
4063: PUSH
4064: LD_EXP 48
4068: ADD
4069: ST_TO_ADDR
// end ; if TestCharacters ( VanHouten ) and CheckCharacterSet ( VanHouten ) then
4070: LD_STRING VanHouten
4072: PPUSH
4073: CALL_OW 28
4077: PUSH
4078: LD_STRING VanHouten
4080: PPUSH
4081: CALL_OW 29
4085: AND
4086: IFFALSE 4117
// begin VanHouten := CreateCharacter ( VanHouten ) ;
4088: LD_ADDR_EXP 49
4092: PUSH
4093: LD_STRING VanHouten
4095: PPUSH
4096: CALL_OW 34
4100: ST_TO_ADDR
// aliance_forces := aliance_forces ^ VanHouten ;
4101: LD_ADDR_EXP 56
4105: PUSH
4106: LD_EXP 56
4110: PUSH
4111: LD_EXP 49
4115: ADD
4116: ST_TO_ADDR
// end ; if TestCharacters ( Yamoko ) and CheckCharacterSet ( Yamoko ) then
4117: LD_STRING Yamoko
4119: PPUSH
4120: CALL_OW 28
4124: PUSH
4125: LD_STRING Yamoko
4127: PPUSH
4128: CALL_OW 29
4132: AND
4133: IFFALSE 4164
// begin Yamoko := CreateCharacter ( Yamoko ) ;
4135: LD_ADDR_EXP 50
4139: PUSH
4140: LD_STRING Yamoko
4142: PPUSH
4143: CALL_OW 34
4147: ST_TO_ADDR
// aliance_forces := aliance_forces ^ Yamoko ;
4148: LD_ADDR_EXP 56
4152: PUSH
4153: LD_EXP 56
4157: PUSH
4158: LD_EXP 50
4162: ADD
4163: ST_TO_ADDR
// end ; DisableAllBazookers ;
4164: CALL 4296 0 0
// if camp = 4 then
4168: LD_EXP 7
4172: PUSH
4173: LD_INT 4
4175: EQUAL
4176: IFFALSE 4182
// sort_aliance_by_the_nation ;
4178: CALL 4187 0 0
// end ;
4182: LD_VAR 0 1
4186: RET
// function sort_aliance_by_the_nation ; var un , us_list , ru_list ; begin
4187: LD_INT 0
4189: PPUSH
4190: PPUSH
4191: PPUSH
4192: PPUSH
// us_list := [ ] ;
4193: LD_ADDR_VAR 0 3
4197: PUSH
4198: EMPTY
4199: ST_TO_ADDR
// ru_list := [ ] ;
4200: LD_ADDR_VAR 0 4
4204: PUSH
4205: EMPTY
4206: ST_TO_ADDR
// for un in aliance_forces do
4207: LD_ADDR_VAR 0 2
4211: PUSH
4212: LD_EXP 56
4216: PUSH
4217: FOR_IN
4218: IFFALSE 4273
// if GetNation ( un ) = us then
4220: LD_VAR 0 2
4224: PPUSH
4225: CALL_OW 248
4229: PUSH
4230: LD_EXP 3
4234: EQUAL
4235: IFFALSE 4255
// us_list := us_list ^ un else
4237: LD_ADDR_VAR 0 3
4241: PUSH
4242: LD_VAR 0 3
4246: PUSH
4247: LD_VAR 0 2
4251: ADD
4252: ST_TO_ADDR
4253: GO 4271
// ru_list := ru_list ^ un ;
4255: LD_ADDR_VAR 0 4
4259: PUSH
4260: LD_VAR 0 4
4264: PUSH
4265: LD_VAR 0 2
4269: ADD
4270: ST_TO_ADDR
4271: GO 4217
4273: POP
4274: POP
// aliance_forces := us_list ^ ru_list ;
4275: LD_ADDR_EXP 56
4279: PUSH
4280: LD_VAR 0 3
4284: PUSH
4285: LD_VAR 0 4
4289: ADD
4290: ST_TO_ADDR
// end ;
4291: LD_VAR 0 1
4295: RET
// function DisableAllBazookers ; var list , un ; begin
4296: LD_INT 0
4298: PPUSH
4299: PPUSH
4300: PPUSH
// list := [ ] ;
4301: LD_ADDR_VAR 0 2
4305: PUSH
4306: EMPTY
4307: ST_TO_ADDR
// for un in aliance_forces do
4308: LD_ADDR_VAR 0 3
4312: PUSH
4313: LD_EXP 56
4317: PUSH
4318: FOR_IN
4319: IFFALSE 4366
// begin if GetClass ( un ) = class_bazooker then
4321: LD_VAR 0 3
4325: PPUSH
4326: CALL_OW 257
4330: PUSH
4331: LD_INT 9
4333: EQUAL
4334: IFFALSE 4348
// SetClass ( un , class_soldier ) ;
4336: LD_VAR 0 3
4340: PPUSH
4341: LD_INT 1
4343: PPUSH
4344: CALL_OW 336
// list := list ^ un ;
4348: LD_ADDR_VAR 0 2
4352: PUSH
4353: LD_VAR 0 2
4357: PUSH
4358: LD_VAR 0 3
4362: ADD
4363: ST_TO_ADDR
// end ;
4364: GO 4318
4366: POP
4367: POP
// aliance_forces := list ;
4368: LD_ADDR_EXP 56
4372: PUSH
4373: LD_VAR 0 2
4377: ST_TO_ADDR
// end ; end_of_file
4378: LD_VAR 0 1
4382: RET
// var cpu_side , cpu_nation , cpu_base ; export function create_russians ; var un , class_list , members ; begin
4383: LD_INT 0
4385: PPUSH
4386: PPUSH
4387: PPUSH
4388: PPUSH
// cpu_side := ru ;
4389: LD_ADDR_LOC 1
4393: PUSH
4394: LD_EXP 2
4398: ST_TO_ADDR
// cpu_nation := nation_russian ;
4399: LD_ADDR_LOC 2
4403: PUSH
4404: LD_INT 3
4406: ST_TO_ADDR
// cpu_base := ru_create ;
4407: LD_ADDR_LOC 3
4411: PUSH
4412: LD_INT 17
4414: ST_TO_ADDR
// members := difficulty * 2 ;
4415: LD_ADDR_VAR 0 4
4419: PUSH
4420: LD_OWVAR 67
4424: PUSH
4425: LD_INT 2
4427: MUL
4428: ST_TO_ADDR
// class_list := [ class_soldier , class_mechanic , class_scientistic , class_engineer ] ;
4429: LD_ADDR_VAR 0 3
4433: PUSH
4434: LD_INT 1
4436: PUSH
4437: LD_INT 3
4439: PUSH
4440: LD_INT 4
4442: PUSH
4443: LD_INT 2
4445: PUSH
4446: EMPTY
4447: LIST
4448: LIST
4449: LIST
4450: LIST
4451: ST_TO_ADDR
// for un in class_list do
4452: LD_ADDR_VAR 0 2
4456: PUSH
4457: LD_VAR 0 3
4461: PUSH
4462: FOR_IN
4463: IFFALSE 4496
// create_units ( cpu_side , cpu_nation , un , members , cpu_base ) ;
4465: LD_LOC 1
4469: PPUSH
4470: LD_LOC 2
4474: PPUSH
4475: LD_VAR 0 2
4479: PPUSH
4480: LD_VAR 0 4
4484: PPUSH
4485: LD_LOC 3
4489: PPUSH
4490: CALL 6508 0 5
4494: GO 4462
4496: POP
4497: POP
// place_all_soldiers ;
4498: CALL 4515 0 0
// place_all_scientistics ;
4502: CALL 4723 0 0
// place_all_mechanics ;
4506: CALL 4912 0 0
// end ;
4510: LD_VAR 0 1
4514: RET
// function place_all_soldiers ; var un , i , max , units , buildings ; begin
4515: LD_INT 0
4517: PPUSH
4518: PPUSH
4519: PPUSH
4520: PPUSH
4521: PPUSH
4522: PPUSH
// buildings := FilterAllUnits ( [ [ f_side , cpu_side ] , [ f_btype , b_bunker ] ] ) ;
4523: LD_ADDR_VAR 0 6
4527: PUSH
4528: LD_INT 22
4530: PUSH
4531: LD_LOC 1
4535: PUSH
4536: EMPTY
4537: LIST
4538: LIST
4539: PUSH
4540: LD_INT 30
4542: PUSH
4543: LD_INT 32
4545: PUSH
4546: EMPTY
4547: LIST
4548: LIST
4549: PUSH
4550: EMPTY
4551: LIST
4552: LIST
4553: PPUSH
4554: CALL_OW 69
4558: ST_TO_ADDR
// units := FilterAllUnits ( [ [ f_side , cpu_side ] , [ f_class , class_soldier ] ] ) ;
4559: LD_ADDR_VAR 0 5
4563: PUSH
4564: LD_INT 22
4566: PUSH
4567: LD_LOC 1
4571: PUSH
4572: EMPTY
4573: LIST
4574: LIST
4575: PUSH
4576: LD_INT 25
4578: PUSH
4579: LD_INT 1
4581: PUSH
4582: EMPTY
4583: LIST
4584: LIST
4585: PUSH
4586: EMPTY
4587: LIST
4588: LIST
4589: PPUSH
4590: CALL_OW 69
4594: ST_TO_ADDR
// if buildings >= units then
4595: LD_VAR 0 6
4599: PUSH
4600: LD_VAR 0 5
4604: GREATEREQUAL
4605: IFFALSE 4623
// max := 0 + units else
4607: LD_ADDR_VAR 0 4
4611: PUSH
4612: LD_INT 0
4614: PUSH
4615: LD_VAR 0 5
4619: PLUS
4620: ST_TO_ADDR
4621: GO 4637
// max := 0 + buildings ;
4623: LD_ADDR_VAR 0 4
4627: PUSH
4628: LD_INT 0
4630: PUSH
4631: LD_VAR 0 6
4635: PLUS
4636: ST_TO_ADDR
// i = 1 ;
4637: LD_ADDR_VAR 0 3
4641: PUSH
4642: LD_INT 1
4644: ST_TO_ADDR
// for un in units do
4645: LD_ADDR_VAR 0 2
4649: PUSH
4650: LD_VAR 0 5
4654: PUSH
4655: FOR_IN
4656: IFFALSE 4716
// begin if i <= max then
4658: LD_VAR 0 3
4662: PUSH
4663: LD_VAR 0 4
4667: LESSEQUAL
4668: IFFALSE 4700
// ComEnterUnit ( un , buildings [ ( i mod buildings ) + 1 ] ) ;
4670: LD_VAR 0 2
4674: PPUSH
4675: LD_VAR 0 6
4679: PUSH
4680: LD_VAR 0 3
4684: PUSH
4685: LD_VAR 0 6
4689: MOD
4690: PUSH
4691: LD_INT 1
4693: PLUS
4694: ARRAY
4695: PPUSH
4696: CALL_OW 120
// i := i + 1 ;
4700: LD_ADDR_VAR 0 3
4704: PUSH
4705: LD_VAR 0 3
4709: PUSH
4710: LD_INT 1
4712: PLUS
4713: ST_TO_ADDR
// end ;
4714: GO 4655
4716: POP
4717: POP
// end ;
4718: LD_VAR 0 1
4722: RET
// function place_all_scientistics ; var un , i , units , buildings ; begin
4723: LD_INT 0
4725: PPUSH
4726: PPUSH
4727: PPUSH
4728: PPUSH
4729: PPUSH
// buildings := FilterAllUnits ( [ [ f_side , cpu_side ] , [ f_or , [ f_btype , b_lab_full ] , [ f_btype , b_lab ] ] ] ) ;
4730: LD_ADDR_VAR 0 5
4734: PUSH
4735: LD_INT 22
4737: PUSH
4738: LD_LOC 1
4742: PUSH
4743: EMPTY
4744: LIST
4745: LIST
4746: PUSH
4747: LD_INT 2
4749: PUSH
4750: LD_INT 30
4752: PUSH
4753: LD_INT 8
4755: PUSH
4756: EMPTY
4757: LIST
4758: LIST
4759: PUSH
4760: LD_INT 30
4762: PUSH
4763: LD_INT 6
4765: PUSH
4766: EMPTY
4767: LIST
4768: LIST
4769: PUSH
4770: EMPTY
4771: LIST
4772: LIST
4773: LIST
4774: PUSH
4775: EMPTY
4776: LIST
4777: LIST
4778: PPUSH
4779: CALL_OW 69
4783: ST_TO_ADDR
// units := FilterAllUnits ( [ [ f_side , cpu_side ] , [ f_class , class_scientistic ] ] ) ;
4784: LD_ADDR_VAR 0 4
4788: PUSH
4789: LD_INT 22
4791: PUSH
4792: LD_LOC 1
4796: PUSH
4797: EMPTY
4798: LIST
4799: LIST
4800: PUSH
4801: LD_INT 25
4803: PUSH
4804: LD_INT 4
4806: PUSH
4807: EMPTY
4808: LIST
4809: LIST
4810: PUSH
4811: EMPTY
4812: LIST
4813: LIST
4814: PPUSH
4815: CALL_OW 69
4819: ST_TO_ADDR
// i = 1 ;
4820: LD_ADDR_VAR 0 3
4824: PUSH
4825: LD_INT 1
4827: ST_TO_ADDR
// for un in units do
4828: LD_ADDR_VAR 0 2
4832: PUSH
4833: LD_VAR 0 4
4837: PUSH
4838: FOR_IN
4839: IFFALSE 4905
// begin ComEnterUnit ( un , buildings [ ( i mod buildings ) + 1 ] ) ;
4841: LD_VAR 0 2
4845: PPUSH
4846: LD_VAR 0 5
4850: PUSH
4851: LD_VAR 0 3
4855: PUSH
4856: LD_VAR 0 5
4860: MOD
4861: PUSH
4862: LD_INT 1
4864: PLUS
4865: ARRAY
4866: PPUSH
4867: CALL_OW 120
// i := i + 1 ;
4871: LD_ADDR_VAR 0 3
4875: PUSH
4876: LD_VAR 0 3
4880: PUSH
4881: LD_INT 1
4883: PLUS
4884: ST_TO_ADDR
// if i > ( units div 2 ) then
4885: LD_VAR 0 3
4889: PUSH
4890: LD_VAR 0 4
4894: PUSH
4895: LD_INT 2
4897: DIV
4898: GREATER
4899: IFFALSE 4903
// break ;
4901: GO 4905
// end ;
4903: GO 4838
4905: POP
4906: POP
// end ;
4907: LD_VAR 0 1
4911: RET
// function place_all_mechanics ; var un , i , units , buildings ; begin
4912: LD_INT 0
4914: PPUSH
4915: PPUSH
4916: PPUSH
4917: PPUSH
4918: PPUSH
// buildings := FilterAllUnits ( [ [ f_side , cpu_side ] , [ f_or , [ f_btype , b_workshop ] , [ f_btype , b_factory ] ] ] ) ;
4919: LD_ADDR_VAR 0 5
4923: PUSH
4924: LD_INT 22
4926: PUSH
4927: LD_LOC 1
4931: PUSH
4932: EMPTY
4933: LIST
4934: LIST
4935: PUSH
4936: LD_INT 2
4938: PUSH
4939: LD_INT 30
4941: PUSH
4942: LD_INT 2
4944: PUSH
4945: EMPTY
4946: LIST
4947: LIST
4948: PUSH
4949: LD_INT 30
4951: PUSH
4952: LD_INT 3
4954: PUSH
4955: EMPTY
4956: LIST
4957: LIST
4958: PUSH
4959: EMPTY
4960: LIST
4961: LIST
4962: LIST
4963: PUSH
4964: EMPTY
4965: LIST
4966: LIST
4967: PPUSH
4968: CALL_OW 69
4972: ST_TO_ADDR
// units := FilterAllUnits ( [ [ f_side , cpu_side ] , [ f_class , class_mechanic ] ] ) ;
4973: LD_ADDR_VAR 0 4
4977: PUSH
4978: LD_INT 22
4980: PUSH
4981: LD_LOC 1
4985: PUSH
4986: EMPTY
4987: LIST
4988: LIST
4989: PUSH
4990: LD_INT 25
4992: PUSH
4993: LD_INT 3
4995: PUSH
4996: EMPTY
4997: LIST
4998: LIST
4999: PUSH
5000: EMPTY
5001: LIST
5002: LIST
5003: PPUSH
5004: CALL_OW 69
5008: ST_TO_ADDR
// i = 1 ;
5009: LD_ADDR_VAR 0 3
5013: PUSH
5014: LD_INT 1
5016: ST_TO_ADDR
// for un in units do
5017: LD_ADDR_VAR 0 2
5021: PUSH
5022: LD_VAR 0 4
5026: PUSH
5027: FOR_IN
5028: IFFALSE 5076
// begin ComEnterUnit ( un , buildings [ ( i mod buildings ) + 1 ] ) ;
5030: LD_VAR 0 2
5034: PPUSH
5035: LD_VAR 0 5
5039: PUSH
5040: LD_VAR 0 3
5044: PUSH
5045: LD_VAR 0 5
5049: MOD
5050: PUSH
5051: LD_INT 1
5053: PLUS
5054: ARRAY
5055: PPUSH
5056: CALL_OW 120
// i := i + 1 ;
5060: LD_ADDR_VAR 0 3
5064: PUSH
5065: LD_VAR 0 3
5069: PUSH
5070: LD_INT 1
5072: PLUS
5073: ST_TO_ADDR
// end ;
5074: GO 5027
5076: POP
5077: POP
// end ; end_of_file
5078: LD_VAR 0 1
5082: RET
// var cpu_side , cpu_nation , cpu_base ; export function create_americans ; var un , class_list , members ; begin
5083: LD_INT 0
5085: PPUSH
5086: PPUSH
5087: PPUSH
5088: PPUSH
// cpu_side := us ;
5089: LD_ADDR_LOC 4
5093: PUSH
5094: LD_EXP 3
5098: ST_TO_ADDR
// cpu_nation := nation_american ;
5099: LD_ADDR_LOC 5
5103: PUSH
5104: LD_INT 1
5106: ST_TO_ADDR
// cpu_base := us_create ;
5107: LD_ADDR_LOC 6
5111: PUSH
5112: LD_INT 18
5114: ST_TO_ADDR
// members := difficulty * 2 ;
5115: LD_ADDR_VAR 0 4
5119: PUSH
5120: LD_OWVAR 67
5124: PUSH
5125: LD_INT 2
5127: MUL
5128: ST_TO_ADDR
// class_list := [ class_soldier , class_mechanic , class_scientistic , class_engineer ] ;
5129: LD_ADDR_VAR 0 3
5133: PUSH
5134: LD_INT 1
5136: PUSH
5137: LD_INT 3
5139: PUSH
5140: LD_INT 4
5142: PUSH
5143: LD_INT 2
5145: PUSH
5146: EMPTY
5147: LIST
5148: LIST
5149: LIST
5150: LIST
5151: ST_TO_ADDR
// for un in class_list do
5152: LD_ADDR_VAR 0 2
5156: PUSH
5157: LD_VAR 0 3
5161: PUSH
5162: FOR_IN
5163: IFFALSE 5196
// create_units ( cpu_side , cpu_nation , un , members , cpu_base ) ;
5165: LD_LOC 4
5169: PPUSH
5170: LD_LOC 5
5174: PPUSH
5175: LD_VAR 0 2
5179: PPUSH
5180: LD_VAR 0 4
5184: PPUSH
5185: LD_LOC 6
5189: PPUSH
5190: CALL 6508 0 5
5194: GO 5162
5196: POP
5197: POP
// create_units ( cpu_side , cpu_nation , class_mechanic , 2 , cpu_base ) ;
5198: LD_LOC 4
5202: PPUSH
5203: LD_LOC 5
5207: PPUSH
5208: LD_INT 3
5210: PPUSH
5211: LD_INT 2
5213: PPUSH
5214: LD_LOC 6
5218: PPUSH
5219: CALL 6508 0 5
// place_all_soldiers ;
5223: CALL 5240 0 0
// place_all_scientistics ;
5227: CALL 5448 0 0
// place_all_mechanics ;
5231: CALL 5637 0 0
// end ;
5235: LD_VAR 0 1
5239: RET
// function place_all_soldiers ; var un , i , max , units , buildings ; begin
5240: LD_INT 0
5242: PPUSH
5243: PPUSH
5244: PPUSH
5245: PPUSH
5246: PPUSH
5247: PPUSH
// buildings := FilterAllUnits ( [ [ f_side , cpu_side ] , [ f_btype , b_bunker ] ] ) ;
5248: LD_ADDR_VAR 0 6
5252: PUSH
5253: LD_INT 22
5255: PUSH
5256: LD_LOC 4
5260: PUSH
5261: EMPTY
5262: LIST
5263: LIST
5264: PUSH
5265: LD_INT 30
5267: PUSH
5268: LD_INT 32
5270: PUSH
5271: EMPTY
5272: LIST
5273: LIST
5274: PUSH
5275: EMPTY
5276: LIST
5277: LIST
5278: PPUSH
5279: CALL_OW 69
5283: ST_TO_ADDR
// units := FilterAllUnits ( [ [ f_side , cpu_side ] , [ f_class , class_soldier ] ] ) ;
5284: LD_ADDR_VAR 0 5
5288: PUSH
5289: LD_INT 22
5291: PUSH
5292: LD_LOC 4
5296: PUSH
5297: EMPTY
5298: LIST
5299: LIST
5300: PUSH
5301: LD_INT 25
5303: PUSH
5304: LD_INT 1
5306: PUSH
5307: EMPTY
5308: LIST
5309: LIST
5310: PUSH
5311: EMPTY
5312: LIST
5313: LIST
5314: PPUSH
5315: CALL_OW 69
5319: ST_TO_ADDR
// if buildings >= units then
5320: LD_VAR 0 6
5324: PUSH
5325: LD_VAR 0 5
5329: GREATEREQUAL
5330: IFFALSE 5348
// max := 0 + units else
5332: LD_ADDR_VAR 0 4
5336: PUSH
5337: LD_INT 0
5339: PUSH
5340: LD_VAR 0 5
5344: PLUS
5345: ST_TO_ADDR
5346: GO 5362
// max := 0 + buildings ;
5348: LD_ADDR_VAR 0 4
5352: PUSH
5353: LD_INT 0
5355: PUSH
5356: LD_VAR 0 6
5360: PLUS
5361: ST_TO_ADDR
// i = 1 ;
5362: LD_ADDR_VAR 0 3
5366: PUSH
5367: LD_INT 1
5369: ST_TO_ADDR
// for un in units do
5370: LD_ADDR_VAR 0 2
5374: PUSH
5375: LD_VAR 0 5
5379: PUSH
5380: FOR_IN
5381: IFFALSE 5441
// begin if i <= max then
5383: LD_VAR 0 3
5387: PUSH
5388: LD_VAR 0 4
5392: LESSEQUAL
5393: IFFALSE 5425
// ComEnterUnit ( un , buildings [ ( i mod buildings ) + 1 ] ) ;
5395: LD_VAR 0 2
5399: PPUSH
5400: LD_VAR 0 6
5404: PUSH
5405: LD_VAR 0 3
5409: PUSH
5410: LD_VAR 0 6
5414: MOD
5415: PUSH
5416: LD_INT 1
5418: PLUS
5419: ARRAY
5420: PPUSH
5421: CALL_OW 120
// i := i + 1 ;
5425: LD_ADDR_VAR 0 3
5429: PUSH
5430: LD_VAR 0 3
5434: PUSH
5435: LD_INT 1
5437: PLUS
5438: ST_TO_ADDR
// end ;
5439: GO 5380
5441: POP
5442: POP
// end ;
5443: LD_VAR 0 1
5447: RET
// function place_all_scientistics ; var un , i , units , buildings ; begin
5448: LD_INT 0
5450: PPUSH
5451: PPUSH
5452: PPUSH
5453: PPUSH
5454: PPUSH
// buildings := FilterAllUnits ( [ [ f_side , cpu_side ] , [ f_or , [ f_btype , b_lab_full ] , [ f_btype , b_lab ] ] ] ) ;
5455: LD_ADDR_VAR 0 5
5459: PUSH
5460: LD_INT 22
5462: PUSH
5463: LD_LOC 4
5467: PUSH
5468: EMPTY
5469: LIST
5470: LIST
5471: PUSH
5472: LD_INT 2
5474: PUSH
5475: LD_INT 30
5477: PUSH
5478: LD_INT 8
5480: PUSH
5481: EMPTY
5482: LIST
5483: LIST
5484: PUSH
5485: LD_INT 30
5487: PUSH
5488: LD_INT 6
5490: PUSH
5491: EMPTY
5492: LIST
5493: LIST
5494: PUSH
5495: EMPTY
5496: LIST
5497: LIST
5498: LIST
5499: PUSH
5500: EMPTY
5501: LIST
5502: LIST
5503: PPUSH
5504: CALL_OW 69
5508: ST_TO_ADDR
// units := FilterAllUnits ( [ [ f_side , cpu_side ] , [ f_class , class_scientistic ] ] ) ;
5509: LD_ADDR_VAR 0 4
5513: PUSH
5514: LD_INT 22
5516: PUSH
5517: LD_LOC 4
5521: PUSH
5522: EMPTY
5523: LIST
5524: LIST
5525: PUSH
5526: LD_INT 25
5528: PUSH
5529: LD_INT 4
5531: PUSH
5532: EMPTY
5533: LIST
5534: LIST
5535: PUSH
5536: EMPTY
5537: LIST
5538: LIST
5539: PPUSH
5540: CALL_OW 69
5544: ST_TO_ADDR
// i = 1 ;
5545: LD_ADDR_VAR 0 3
5549: PUSH
5550: LD_INT 1
5552: ST_TO_ADDR
// for un in units do
5553: LD_ADDR_VAR 0 2
5557: PUSH
5558: LD_VAR 0 4
5562: PUSH
5563: FOR_IN
5564: IFFALSE 5630
// begin ComEnterUnit ( un , buildings [ ( i mod buildings ) + 1 ] ) ;
5566: LD_VAR 0 2
5570: PPUSH
5571: LD_VAR 0 5
5575: PUSH
5576: LD_VAR 0 3
5580: PUSH
5581: LD_VAR 0 5
5585: MOD
5586: PUSH
5587: LD_INT 1
5589: PLUS
5590: ARRAY
5591: PPUSH
5592: CALL_OW 120
// i := i + 1 ;
5596: LD_ADDR_VAR 0 3
5600: PUSH
5601: LD_VAR 0 3
5605: PUSH
5606: LD_INT 1
5608: PLUS
5609: ST_TO_ADDR
// if i > ( units div 2 ) then
5610: LD_VAR 0 3
5614: PUSH
5615: LD_VAR 0 4
5619: PUSH
5620: LD_INT 2
5622: DIV
5623: GREATER
5624: IFFALSE 5628
// break ;
5626: GO 5630
// end ;
5628: GO 5563
5630: POP
5631: POP
// end ;
5632: LD_VAR 0 1
5636: RET
// function place_all_mechanics ; var un , i , units , buildings ; begin
5637: LD_INT 0
5639: PPUSH
5640: PPUSH
5641: PPUSH
5642: PPUSH
5643: PPUSH
// buildings := FilterAllUnits ( [ [ f_side , cpu_side ] , [ f_or , [ f_btype , b_workshop ] , [ f_btype , b_factory ] ] ] ) ;
5644: LD_ADDR_VAR 0 5
5648: PUSH
5649: LD_INT 22
5651: PUSH
5652: LD_LOC 4
5656: PUSH
5657: EMPTY
5658: LIST
5659: LIST
5660: PUSH
5661: LD_INT 2
5663: PUSH
5664: LD_INT 30
5666: PUSH
5667: LD_INT 2
5669: PUSH
5670: EMPTY
5671: LIST
5672: LIST
5673: PUSH
5674: LD_INT 30
5676: PUSH
5677: LD_INT 3
5679: PUSH
5680: EMPTY
5681: LIST
5682: LIST
5683: PUSH
5684: EMPTY
5685: LIST
5686: LIST
5687: LIST
5688: PUSH
5689: EMPTY
5690: LIST
5691: LIST
5692: PPUSH
5693: CALL_OW 69
5697: ST_TO_ADDR
// units := FilterAllUnits ( [ [ f_side , cpu_side ] , [ f_class , class_mechanic ] ] ) ;
5698: LD_ADDR_VAR 0 4
5702: PUSH
5703: LD_INT 22
5705: PUSH
5706: LD_LOC 4
5710: PUSH
5711: EMPTY
5712: LIST
5713: LIST
5714: PUSH
5715: LD_INT 25
5717: PUSH
5718: LD_INT 3
5720: PUSH
5721: EMPTY
5722: LIST
5723: LIST
5724: PUSH
5725: EMPTY
5726: LIST
5727: LIST
5728: PPUSH
5729: CALL_OW 69
5733: ST_TO_ADDR
// i = 1 ;
5734: LD_ADDR_VAR 0 3
5738: PUSH
5739: LD_INT 1
5741: ST_TO_ADDR
// for un in units do
5742: LD_ADDR_VAR 0 2
5746: PUSH
5747: LD_VAR 0 4
5751: PUSH
5752: FOR_IN
5753: IFFALSE 5801
// begin ComEnterUnit ( un , buildings [ ( i mod buildings ) + 1 ] ) ;
5755: LD_VAR 0 2
5759: PPUSH
5760: LD_VAR 0 5
5764: PUSH
5765: LD_VAR 0 3
5769: PUSH
5770: LD_VAR 0 5
5774: MOD
5775: PUSH
5776: LD_INT 1
5778: PLUS
5779: ARRAY
5780: PPUSH
5781: CALL_OW 120
// i := i + 1 ;
5785: LD_ADDR_VAR 0 3
5789: PUSH
5790: LD_VAR 0 3
5794: PUSH
5795: LD_INT 1
5797: PLUS
5798: ST_TO_ADDR
// end ;
5799: GO 5752
5801: POP
5802: POP
// end ; end_of_file
5803: LD_VAR 0 1
5807: RET
// var cpu_side , cpu_nation , cpu_base ; export function create_arabians ; var un , class_list , members ; begin
5808: LD_INT 0
5810: PPUSH
5811: PPUSH
5812: PPUSH
5813: PPUSH
// cpu_side := ar ;
5814: LD_ADDR_LOC 7
5818: PUSH
5819: LD_EXP 4
5823: ST_TO_ADDR
// cpu_nation := nation_arabian ;
5824: LD_ADDR_LOC 8
5828: PUSH
5829: LD_INT 2
5831: ST_TO_ADDR
// cpu_base := ar_create ;
5832: LD_ADDR_LOC 9
5836: PUSH
5837: LD_INT 19
5839: ST_TO_ADDR
// members := difficulty + 1 ;
5840: LD_ADDR_VAR 0 4
5844: PUSH
5845: LD_OWVAR 67
5849: PUSH
5850: LD_INT 1
5852: PLUS
5853: ST_TO_ADDR
// class_list := [ class_soldier , class_mechanic , class_scientistic , class_engineer ] ;
5854: LD_ADDR_VAR 0 3
5858: PUSH
5859: LD_INT 1
5861: PUSH
5862: LD_INT 3
5864: PUSH
5865: LD_INT 4
5867: PUSH
5868: LD_INT 2
5870: PUSH
5871: EMPTY
5872: LIST
5873: LIST
5874: LIST
5875: LIST
5876: ST_TO_ADDR
// for un in class_list do
5877: LD_ADDR_VAR 0 2
5881: PUSH
5882: LD_VAR 0 3
5886: PUSH
5887: FOR_IN
5888: IFFALSE 5921
// create_units ( cpu_side , cpu_nation , un , members , cpu_base ) ;
5890: LD_LOC 7
5894: PPUSH
5895: LD_LOC 8
5899: PPUSH
5900: LD_VAR 0 2
5904: PPUSH
5905: LD_VAR 0 4
5909: PPUSH
5910: LD_LOC 9
5914: PPUSH
5915: CALL 6508 0 5
5919: GO 5887
5921: POP
5922: POP
// place_all_soldiers ;
5923: CALL 5940 0 0
// place_all_scientistics ;
5927: CALL 6148 0 0
// place_all_mechanics ;
5931: CALL 6337 0 0
// end ;
5935: LD_VAR 0 1
5939: RET
// function place_all_soldiers ; var un , i , max , units , buildings ; begin
5940: LD_INT 0
5942: PPUSH
5943: PPUSH
5944: PPUSH
5945: PPUSH
5946: PPUSH
5947: PPUSH
// buildings := FilterAllUnits ( [ [ f_side , cpu_side ] , [ f_btype , b_bunker ] ] ) ;
5948: LD_ADDR_VAR 0 6
5952: PUSH
5953: LD_INT 22
5955: PUSH
5956: LD_LOC 7
5960: PUSH
5961: EMPTY
5962: LIST
5963: LIST
5964: PUSH
5965: LD_INT 30
5967: PUSH
5968: LD_INT 32
5970: PUSH
5971: EMPTY
5972: LIST
5973: LIST
5974: PUSH
5975: EMPTY
5976: LIST
5977: LIST
5978: PPUSH
5979: CALL_OW 69
5983: ST_TO_ADDR
// units := FilterAllUnits ( [ [ f_side , cpu_side ] , [ f_class , class_soldier ] ] ) ;
5984: LD_ADDR_VAR 0 5
5988: PUSH
5989: LD_INT 22
5991: PUSH
5992: LD_LOC 7
5996: PUSH
5997: EMPTY
5998: LIST
5999: LIST
6000: PUSH
6001: LD_INT 25
6003: PUSH
6004: LD_INT 1
6006: PUSH
6007: EMPTY
6008: LIST
6009: LIST
6010: PUSH
6011: EMPTY
6012: LIST
6013: LIST
6014: PPUSH
6015: CALL_OW 69
6019: ST_TO_ADDR
// if buildings >= units then
6020: LD_VAR 0 6
6024: PUSH
6025: LD_VAR 0 5
6029: GREATEREQUAL
6030: IFFALSE 6048
// max := 0 + units else
6032: LD_ADDR_VAR 0 4
6036: PUSH
6037: LD_INT 0
6039: PUSH
6040: LD_VAR 0 5
6044: PLUS
6045: ST_TO_ADDR
6046: GO 6062
// max := 0 + buildings ;
6048: LD_ADDR_VAR 0 4
6052: PUSH
6053: LD_INT 0
6055: PUSH
6056: LD_VAR 0 6
6060: PLUS
6061: ST_TO_ADDR
// i = 1 ;
6062: LD_ADDR_VAR 0 3
6066: PUSH
6067: LD_INT 1
6069: ST_TO_ADDR
// for un in units do
6070: LD_ADDR_VAR 0 2
6074: PUSH
6075: LD_VAR 0 5
6079: PUSH
6080: FOR_IN
6081: IFFALSE 6141
// begin if i <= max then
6083: LD_VAR 0 3
6087: PUSH
6088: LD_VAR 0 4
6092: LESSEQUAL
6093: IFFALSE 6125
// ComEnterUnit ( un , buildings [ ( i mod buildings ) + 1 ] ) ;
6095: LD_VAR 0 2
6099: PPUSH
6100: LD_VAR 0 6
6104: PUSH
6105: LD_VAR 0 3
6109: PUSH
6110: LD_VAR 0 6
6114: MOD
6115: PUSH
6116: LD_INT 1
6118: PLUS
6119: ARRAY
6120: PPUSH
6121: CALL_OW 120
// i := i + 1 ;
6125: LD_ADDR_VAR 0 3
6129: PUSH
6130: LD_VAR 0 3
6134: PUSH
6135: LD_INT 1
6137: PLUS
6138: ST_TO_ADDR
// end ;
6139: GO 6080
6141: POP
6142: POP
// end ;
6143: LD_VAR 0 1
6147: RET
// function place_all_scientistics ; var un , i , units , buildings ; begin
6148: LD_INT 0
6150: PPUSH
6151: PPUSH
6152: PPUSH
6153: PPUSH
6154: PPUSH
// buildings := FilterAllUnits ( [ [ f_side , cpu_side ] , [ f_or , [ f_btype , b_lab_full ] , [ f_btype , b_lab ] ] ] ) ;
6155: LD_ADDR_VAR 0 5
6159: PUSH
6160: LD_INT 22
6162: PUSH
6163: LD_LOC 7
6167: PUSH
6168: EMPTY
6169: LIST
6170: LIST
6171: PUSH
6172: LD_INT 2
6174: PUSH
6175: LD_INT 30
6177: PUSH
6178: LD_INT 8
6180: PUSH
6181: EMPTY
6182: LIST
6183: LIST
6184: PUSH
6185: LD_INT 30
6187: PUSH
6188: LD_INT 6
6190: PUSH
6191: EMPTY
6192: LIST
6193: LIST
6194: PUSH
6195: EMPTY
6196: LIST
6197: LIST
6198: LIST
6199: PUSH
6200: EMPTY
6201: LIST
6202: LIST
6203: PPUSH
6204: CALL_OW 69
6208: ST_TO_ADDR
// units := FilterAllUnits ( [ [ f_side , cpu_side ] , [ f_class , class_scientistic ] ] ) ;
6209: LD_ADDR_VAR 0 4
6213: PUSH
6214: LD_INT 22
6216: PUSH
6217: LD_LOC 7
6221: PUSH
6222: EMPTY
6223: LIST
6224: LIST
6225: PUSH
6226: LD_INT 25
6228: PUSH
6229: LD_INT 4
6231: PUSH
6232: EMPTY
6233: LIST
6234: LIST
6235: PUSH
6236: EMPTY
6237: LIST
6238: LIST
6239: PPUSH
6240: CALL_OW 69
6244: ST_TO_ADDR
// i = 1 ;
6245: LD_ADDR_VAR 0 3
6249: PUSH
6250: LD_INT 1
6252: ST_TO_ADDR
// for un in units do
6253: LD_ADDR_VAR 0 2
6257: PUSH
6258: LD_VAR 0 4
6262: PUSH
6263: FOR_IN
6264: IFFALSE 6330
// begin ComEnterUnit ( un , buildings [ ( i mod buildings ) + 1 ] ) ;
6266: LD_VAR 0 2
6270: PPUSH
6271: LD_VAR 0 5
6275: PUSH
6276: LD_VAR 0 3
6280: PUSH
6281: LD_VAR 0 5
6285: MOD
6286: PUSH
6287: LD_INT 1
6289: PLUS
6290: ARRAY
6291: PPUSH
6292: CALL_OW 120
// i := i + 1 ;
6296: LD_ADDR_VAR 0 3
6300: PUSH
6301: LD_VAR 0 3
6305: PUSH
6306: LD_INT 1
6308: PLUS
6309: ST_TO_ADDR
// if i > ( units div 2 ) then
6310: LD_VAR 0 3
6314: PUSH
6315: LD_VAR 0 4
6319: PUSH
6320: LD_INT 2
6322: DIV
6323: GREATER
6324: IFFALSE 6328
// break ;
6326: GO 6330
// end ;
6328: GO 6263
6330: POP
6331: POP
// end ;
6332: LD_VAR 0 1
6336: RET
// function place_all_mechanics ; var un , i , units , buildings ; begin
6337: LD_INT 0
6339: PPUSH
6340: PPUSH
6341: PPUSH
6342: PPUSH
6343: PPUSH
// buildings := FilterAllUnits ( [ [ f_side , cpu_side ] , [ f_or , [ f_btype , b_workshop ] , [ f_btype , b_factory ] ] ] ) ;
6344: LD_ADDR_VAR 0 5
6348: PUSH
6349: LD_INT 22
6351: PUSH
6352: LD_LOC 7
6356: PUSH
6357: EMPTY
6358: LIST
6359: LIST
6360: PUSH
6361: LD_INT 2
6363: PUSH
6364: LD_INT 30
6366: PUSH
6367: LD_INT 2
6369: PUSH
6370: EMPTY
6371: LIST
6372: LIST
6373: PUSH
6374: LD_INT 30
6376: PUSH
6377: LD_INT 3
6379: PUSH
6380: EMPTY
6381: LIST
6382: LIST
6383: PUSH
6384: EMPTY
6385: LIST
6386: LIST
6387: LIST
6388: PUSH
6389: EMPTY
6390: LIST
6391: LIST
6392: PPUSH
6393: CALL_OW 69
6397: ST_TO_ADDR
// units := FilterAllUnits ( [ [ f_side , cpu_side ] , [ f_class , class_mechanic ] ] ) ;
6398: LD_ADDR_VAR 0 4
6402: PUSH
6403: LD_INT 22
6405: PUSH
6406: LD_LOC 7
6410: PUSH
6411: EMPTY
6412: LIST
6413: LIST
6414: PUSH
6415: LD_INT 25
6417: PUSH
6418: LD_INT 3
6420: PUSH
6421: EMPTY
6422: LIST
6423: LIST
6424: PUSH
6425: EMPTY
6426: LIST
6427: LIST
6428: PPUSH
6429: CALL_OW 69
6433: ST_TO_ADDR
// i = 1 ;
6434: LD_ADDR_VAR 0 3
6438: PUSH
6439: LD_INT 1
6441: ST_TO_ADDR
// for un in units do
6442: LD_ADDR_VAR 0 2
6446: PUSH
6447: LD_VAR 0 4
6451: PUSH
6452: FOR_IN
6453: IFFALSE 6501
// begin ComEnterUnit ( un , buildings [ ( i mod buildings ) + 1 ] ) ;
6455: LD_VAR 0 2
6459: PPUSH
6460: LD_VAR 0 5
6464: PUSH
6465: LD_VAR 0 3
6469: PUSH
6470: LD_VAR 0 5
6474: MOD
6475: PUSH
6476: LD_INT 1
6478: PLUS
6479: ARRAY
6480: PPUSH
6481: CALL_OW 120
// i := i + 1 ;
6485: LD_ADDR_VAR 0 3
6489: PUSH
6490: LD_VAR 0 3
6494: PUSH
6495: LD_INT 1
6497: PLUS
6498: ST_TO_ADDR
// end ;
6499: GO 6452
6501: POP
6502: POP
// end ; end_of_file
6503: LD_VAR 0 1
6507: RET
// export function create_units ( side , nation , class_n , num , area ) ; var i , un , lev ; begin
6508: LD_INT 0
6510: PPUSH
6511: PPUSH
6512: PPUSH
6513: PPUSH
// if class_n = class_scientistic then
6514: LD_VAR 0 3
6518: PUSH
6519: LD_INT 4
6521: EQUAL
6522: IFFALSE 6576
// begin lev := [ 3 , 6 , 10 ] [ difficulty ] ;
6524: LD_ADDR_VAR 0 9
6528: PUSH
6529: LD_INT 3
6531: PUSH
6532: LD_INT 6
6534: PUSH
6535: LD_INT 10
6537: PUSH
6538: EMPTY
6539: LIST
6540: LIST
6541: LIST
6542: PUSH
6543: LD_OWVAR 67
6547: ARRAY
6548: ST_TO_ADDR
// num := [ 2 , 4 , 6 ] [ difficulty ] ;
6549: LD_ADDR_VAR 0 4
6553: PUSH
6554: LD_INT 2
6556: PUSH
6557: LD_INT 4
6559: PUSH
6560: LD_INT 6
6562: PUSH
6563: EMPTY
6564: LIST
6565: LIST
6566: LIST
6567: PUSH
6568: LD_OWVAR 67
6572: ARRAY
6573: ST_TO_ADDR
// end else
6574: GO 6646
// if class_n = class_soldier then
6576: LD_VAR 0 3
6580: PUSH
6581: LD_INT 1
6583: EQUAL
6584: IFFALSE 6621
// begin lev := [ 5 , 7 , 10 ] [ difficulty ] ;
6586: LD_ADDR_VAR 0 9
6590: PUSH
6591: LD_INT 5
6593: PUSH
6594: LD_INT 7
6596: PUSH
6597: LD_INT 10
6599: PUSH
6600: EMPTY
6601: LIST
6602: LIST
6603: LIST
6604: PUSH
6605: LD_OWVAR 67
6609: ARRAY
6610: ST_TO_ADDR
// num := 6 ;
6611: LD_ADDR_VAR 0 4
6615: PUSH
6616: LD_INT 6
6618: ST_TO_ADDR
// end else
6619: GO 6646
// lev := [ 4 , 6 , 10 ] [ difficulty ] ;
6621: LD_ADDR_VAR 0 9
6625: PUSH
6626: LD_INT 4
6628: PUSH
6629: LD_INT 6
6631: PUSH
6632: LD_INT 10
6634: PUSH
6635: EMPTY
6636: LIST
6637: LIST
6638: LIST
6639: PUSH
6640: LD_OWVAR 67
6644: ARRAY
6645: ST_TO_ADDR
// uc_side := side ;
6646: LD_ADDR_OWVAR 20
6650: PUSH
6651: LD_VAR 0 1
6655: ST_TO_ADDR
// uc_nation := nation ;
6656: LD_ADDR_OWVAR 21
6660: PUSH
6661: LD_VAR 0 2
6665: ST_TO_ADDR
// for i = 1 to num do
6666: LD_ADDR_VAR 0 7
6670: PUSH
6671: DOUBLE
6672: LD_INT 1
6674: DEC
6675: ST_TO_ADDR
6676: LD_VAR 0 4
6680: PUSH
6681: FOR_TO
6682: IFFALSE 6827
// begin uc_direction := Rand ( 0 , 5 ) ;
6684: LD_ADDR_OWVAR 24
6688: PUSH
6689: LD_INT 0
6691: PPUSH
6692: LD_INT 5
6694: PPUSH
6695: CALL_OW 12
6699: ST_TO_ADDR
// case class_n of 1 :
6700: LD_VAR 0 3
6704: PUSH
6705: LD_INT 1
6707: DOUBLE
6708: EQUAL
6709: IFTRUE 6713
6711: GO 6728
6713: POP
// PrepareSoldier ( 0 , lev ) ; 2 :
6714: LD_INT 0
6716: PPUSH
6717: LD_VAR 0 9
6721: PPUSH
6722: CALL_OW 381
6726: GO 6798
6728: LD_INT 2
6730: DOUBLE
6731: EQUAL
6732: IFTRUE 6736
6734: GO 6751
6736: POP
// PrepareEngineer ( 0 , lev ) ; 3 :
6737: LD_INT 0
6739: PPUSH
6740: LD_VAR 0 9
6744: PPUSH
6745: CALL_OW 382
6749: GO 6798
6751: LD_INT 3
6753: DOUBLE
6754: EQUAL
6755: IFTRUE 6759
6757: GO 6774
6759: POP
// PrepareMechanic ( 0 , lev ) ; 4 :
6760: LD_INT 0
6762: PPUSH
6763: LD_VAR 0 9
6767: PPUSH
6768: CALL_OW 383
6772: GO 6798
6774: LD_INT 4
6776: DOUBLE
6777: EQUAL
6778: IFTRUE 6782
6780: GO 6797
6782: POP
// PrepareScientist ( 0 , lev ) ; end ;
6783: LD_INT 0
6785: PPUSH
6786: LD_VAR 0 9
6790: PPUSH
6791: CALL_OW 384
6795: GO 6798
6797: POP
// un := CreateHuman ;
6798: LD_ADDR_VAR 0 8
6802: PUSH
6803: CALL_OW 44
6807: ST_TO_ADDR
// PlaceUnitArea ( un , area , false ) ;
6808: LD_VAR 0 8
6812: PPUSH
6813: LD_VAR 0 5
6817: PPUSH
6818: LD_INT 0
6820: PPUSH
6821: CALL_OW 49
// end ;
6825: GO 6681
6827: POP
6828: POP
// end ;
6829: LD_VAR 0 6
6833: RET
// export function prepare_apemans ; var ape , i ; begin
6834: LD_INT 0
6836: PPUSH
6837: PPUSH
6838: PPUSH
// for i = 1 to ( 6 - difficulty ) do
6839: LD_ADDR_VAR 0 3
6843: PUSH
6844: DOUBLE
6845: LD_INT 1
6847: DEC
6848: ST_TO_ADDR
6849: LD_INT 6
6851: PUSH
6852: LD_OWVAR 67
6856: MINUS
6857: PUSH
6858: FOR_TO
6859: IFFALSE 7059
// begin uc_side := neutral ;
6861: LD_ADDR_OWVAR 20
6865: PUSH
6866: LD_EXP 6
6870: ST_TO_ADDR
// uc_nation := nation_nature ;
6871: LD_ADDR_OWVAR 21
6875: PUSH
6876: LD_INT 0
6878: ST_TO_ADDR
// hc_class := class_apeman ;
6879: LD_ADDR_OWVAR 28
6883: PUSH
6884: LD_INT 12
6886: ST_TO_ADDR
// hc_basic_skills := [ Rand ( 1 , 2 ) , Rand ( 1 , 2 ) , Rand ( 1 , 2 ) , Rand ( 1 , 2 ) ] ;
6887: LD_ADDR_OWVAR 30
6891: PUSH
6892: LD_INT 1
6894: PPUSH
6895: LD_INT 2
6897: PPUSH
6898: CALL_OW 12
6902: PUSH
6903: LD_INT 1
6905: PPUSH
6906: LD_INT 2
6908: PPUSH
6909: CALL_OW 12
6913: PUSH
6914: LD_INT 1
6916: PPUSH
6917: LD_INT 2
6919: PPUSH
6920: CALL_OW 12
6924: PUSH
6925: LD_INT 1
6927: PPUSH
6928: LD_INT 2
6930: PPUSH
6931: CALL_OW 12
6935: PUSH
6936: EMPTY
6937: LIST
6938: LIST
6939: LIST
6940: LIST
6941: ST_TO_ADDR
// hc_skills := [ 3 , 3 , 3 , 3 ] ;
6942: LD_ADDR_OWVAR 31
6946: PUSH
6947: LD_INT 3
6949: PUSH
6950: LD_INT 3
6952: PUSH
6953: LD_INT 3
6955: PUSH
6956: LD_INT 3
6958: PUSH
6959: EMPTY
6960: LIST
6961: LIST
6962: LIST
6963: LIST
6964: ST_TO_ADDR
// hc_attr := [ 10 , 12 ] ;
6965: LD_ADDR_OWVAR 29
6969: PUSH
6970: LD_INT 10
6972: PUSH
6973: LD_INT 12
6975: PUSH
6976: EMPTY
6977: LIST
6978: LIST
6979: ST_TO_ADDR
// hc_sex := [ sex_female , sex_male ] [ Rand ( 1 , 2 ) ] ;
6980: LD_ADDR_OWVAR 27
6984: PUSH
6985: LD_INT 2
6987: PUSH
6988: LD_INT 1
6990: PUSH
6991: EMPTY
6992: LIST
6993: LIST
6994: PUSH
6995: LD_INT 1
6997: PPUSH
6998: LD_INT 2
7000: PPUSH
7001: CALL_OW 12
7005: ARRAY
7006: ST_TO_ADDR
// hc_importance := 0 ;
7007: LD_ADDR_OWVAR 32
7011: PUSH
7012: LD_INT 0
7014: ST_TO_ADDR
// hc_agressivity := Rand ( - 20 , 20 ) ;
7015: LD_ADDR_OWVAR 35
7019: PUSH
7020: LD_INT 20
7022: NEG
7023: PPUSH
7024: LD_INT 20
7026: PPUSH
7027: CALL_OW 12
7031: ST_TO_ADDR
// ape := CreateHuman ;
7032: LD_ADDR_VAR 0 2
7036: PUSH
7037: CALL_OW 44
7041: ST_TO_ADDR
// PlaceUnitArea ( ape , apeman_forest , false ) ;
7042: LD_VAR 0 2
7046: PPUSH
7047: LD_INT 32
7049: PPUSH
7050: LD_INT 0
7052: PPUSH
7053: CALL_OW 49
// end ;
7057: GO 6858
7059: POP
7060: POP
// end ; end_of_file
7061: LD_VAR 0 1
7065: RET
// var alien_tower_spoted ; export function starting_scene ; var check_time ; begin
7066: LD_INT 0
7068: PPUSH
7069: PPUSH
// CenterNowOnXY ( 75 , 27 ) ;
7070: LD_INT 75
7072: PPUSH
7073: LD_INT 27
7075: PPUSH
7076: CALL_OW 86
// wait ( 0 0$1 ) ;
7080: LD_INT 35
7082: PPUSH
7083: CALL_OW 67
// InGameOn ;
7087: CALL_OW 8
// ComMoveToArea ( IsInUnit ( Burlak ) , burlak_panorama_area ) ;
7091: LD_EXP 12
7095: PPUSH
7096: CALL_OW 310
7100: PPUSH
7101: LD_INT 8
7103: PPUSH
7104: CALL_OW 113
// ComMoveToArea ( IsInUnit ( MacMillan ) , jmm_panorama_area ) ;
7108: LD_EXP 13
7112: PPUSH
7113: CALL_OW 310
7117: PPUSH
7118: LD_INT 28
7120: PPUSH
7121: CALL_OW 113
// CenterOnUnits ( [ MacMillan , Burlak ] ) ;
7125: LD_EXP 13
7129: PUSH
7130: LD_EXP 12
7134: PUSH
7135: EMPTY
7136: LIST
7137: LIST
7138: PPUSH
7139: CALL_OW 85
// repeat wait ( 20 ) ;
7143: LD_INT 20
7145: PPUSH
7146: CALL_OW 67
// until IsInArea ( Burlak , burlak_panorama_area ) and IsInArea ( MacMillan , jmm_panorama_area ) ;
7150: LD_EXP 12
7154: PPUSH
7155: LD_INT 8
7157: PPUSH
7158: CALL_OW 308
7162: PUSH
7163: LD_EXP 13
7167: PPUSH
7168: LD_INT 28
7170: PPUSH
7171: CALL_OW 308
7175: AND
7176: IFFALSE 7143
// CenterOnUnits ( [ MacMillan , Burlak ] ) ;
7178: LD_EXP 13
7182: PUSH
7183: LD_EXP 12
7187: PUSH
7188: EMPTY
7189: LIST
7190: LIST
7191: PPUSH
7192: CALL_OW 85
// ComExitVehicle ( [ Burlak , MacMillan ] ) ;
7196: LD_EXP 12
7200: PUSH
7201: LD_EXP 13
7205: PUSH
7206: EMPTY
7207: LIST
7208: LIST
7209: PPUSH
7210: CALL_OW 121
// while IsInUnit ( Burlak ) or IsInUnit ( MacMillan ) do
7214: LD_EXP 12
7218: PPUSH
7219: CALL_OW 310
7223: PUSH
7224: LD_EXP 13
7228: PPUSH
7229: CALL_OW 310
7233: OR
7234: IFFALSE 7245
// wait ( 5 ) ;
7236: LD_INT 5
7238: PPUSH
7239: CALL_OW 67
7243: GO 7214
// wait ( 10 ) ;
7245: LD_INT 10
7247: PPUSH
7248: CALL_OW 67
// ComMoveToArea ( Burlak , burlak_talking_panorama ) ;
7252: LD_EXP 12
7256: PPUSH
7257: LD_INT 9
7259: PPUSH
7260: CALL_OW 113
// ComMoveToArea ( MacMillan , jmm_talking_panorama ) ;
7264: LD_EXP 13
7268: PPUSH
7269: LD_INT 29
7271: PPUSH
7272: CALL_OW 113
// check_time := TICK ;
7276: LD_ADDR_VAR 0 2
7280: PUSH
7281: LD_OWVAR 1
7285: ST_TO_ADDR
// repeat ComHold ( FilterUnitsInArea ( burlak_talking_panorama , [ [ f_side , you ] ] ) ) ;
7286: LD_INT 9
7288: PPUSH
7289: LD_INT 22
7291: PUSH
7292: LD_EXP 1
7296: PUSH
7297: EMPTY
7298: LIST
7299: LIST
7300: PUSH
7301: EMPTY
7302: LIST
7303: PPUSH
7304: CALL_OW 70
7308: PPUSH
7309: CALL_OW 140
// ComHold ( FilterUnitsInArea ( jmm_talking_panorama , [ [ f_side , you ] ] ) ) ;
7313: LD_INT 29
7315: PPUSH
7316: LD_INT 22
7318: PUSH
7319: LD_EXP 1
7323: PUSH
7324: EMPTY
7325: LIST
7326: LIST
7327: PUSH
7328: EMPTY
7329: LIST
7330: PPUSH
7331: CALL_OW 70
7335: PPUSH
7336: CALL_OW 140
// CenterOnUnits ( [ MacMillan , Burlak ] ) ;
7340: LD_EXP 13
7344: PUSH
7345: LD_EXP 12
7349: PUSH
7350: EMPTY
7351: LIST
7352: LIST
7353: PPUSH
7354: CALL_OW 85
// wait ( 0 0$1 ) ;
7358: LD_INT 35
7360: PPUSH
7361: CALL_OW 67
// until ( IsInArea ( Burlak , burlak_talking_panorama ) and IsInArea ( MacMillan , jmm_talking_panorama ) ) or ( check_time < ( TICK - 0 0$4 ) ) ;
7365: LD_EXP 12
7369: PPUSH
7370: LD_INT 9
7372: PPUSH
7373: CALL_OW 308
7377: PUSH
7378: LD_EXP 13
7382: PPUSH
7383: LD_INT 29
7385: PPUSH
7386: CALL_OW 308
7390: AND
7391: PUSH
7392: LD_VAR 0 2
7396: PUSH
7397: LD_OWVAR 1
7401: PUSH
7402: LD_INT 140
7404: MINUS
7405: LESS
7406: OR
7407: IFFALSE 7286
// ComTurnUnit ( MacMillan , Burlak ) ;
7409: LD_EXP 13
7413: PPUSH
7414: LD_EXP 12
7418: PPUSH
7419: CALL_OW 119
// ComTurnUnit ( Burlak , MacMillan ) ;
7423: LD_EXP 12
7427: PPUSH
7428: LD_EXP 13
7432: PPUSH
7433: CALL_OW 119
// CenterOnXY ( 75 , 31 ) ;
7437: LD_INT 75
7439: PPUSH
7440: LD_INT 31
7442: PPUSH
7443: CALL_OW 84
// wait ( 10 ) ;
7447: LD_INT 10
7449: PPUSH
7450: CALL_OW 67
// InGameOff ;
7454: CALL_OW 9
// DialogueOn ;
7458: CALL_OW 6
// interface_hidden := true ;
7462: LD_ADDR_OWVAR 54
7466: PUSH
7467: LD_INT 1
7469: ST_TO_ADDR
// case camp of 4 :
7470: LD_EXP 7
7474: PUSH
7475: LD_INT 4
7477: DOUBLE
7478: EQUAL
7479: IFTRUE 7483
7481: GO 7534
7483: POP
// begin Say ( MacMillan , DStart-JMM-JMM-1 ) ;
7484: LD_EXP 13
7488: PPUSH
7489: LD_STRING DStart-JMM-JMM-1
7491: PPUSH
7492: CALL_OW 88
// Say ( Burlak , DStart-JMM-Bur-1 ) ;
7496: LD_EXP 12
7500: PPUSH
7501: LD_STRING DStart-JMM-Bur-1
7503: PPUSH
7504: CALL_OW 88
// Say ( MacMillan , DStart-JMM-JMM-2 ) ;
7508: LD_EXP 13
7512: PPUSH
7513: LD_STRING DStart-JMM-JMM-2
7515: PPUSH
7516: CALL_OW 88
// Say ( Burlak , DStart-JMM-Bur-2 ) ;
7520: LD_EXP 12
7524: PPUSH
7525: LD_STRING DStart-JMM-Bur-2
7527: PPUSH
7528: CALL_OW 88
// end ; 6 :
7532: GO 7582
7534: LD_INT 6
7536: DOUBLE
7537: EQUAL
7538: IFTRUE 7542
7540: GO 7581
7542: POP
// begin Say ( Burlak , DStart-Burlak-Bur-1 ) ;
7543: LD_EXP 12
7547: PPUSH
7548: LD_STRING DStart-Burlak-Bur-1
7550: PPUSH
7551: CALL_OW 88
// Say ( Macmillan , DStart-Burlak-JMM-1 ) ;
7555: LD_EXP 13
7559: PPUSH
7560: LD_STRING DStart-Burlak-JMM-1
7562: PPUSH
7563: CALL_OW 88
// Say ( Burlak , DStart-Burlak-Bur-2 ) ;
7567: LD_EXP 12
7571: PPUSH
7572: LD_STRING DStart-Burlak-Bur-2
7574: PPUSH
7575: CALL_OW 88
// end ; end ;
7579: GO 7582
7581: POP
// interface_hidden := false ;
7582: LD_ADDR_OWVAR 54
7586: PUSH
7587: LD_INT 0
7589: ST_TO_ADDR
// DialogueOff ;
7590: CALL_OW 7
// SaveForQuickRestart ;
7594: CALL_OW 22
// wait ( 20 ) ;
7598: LD_INT 20
7600: PPUSH
7601: CALL_OW 67
// ChangeMissionObjectives ( MStart ) ;
7605: LD_STRING MStart
7607: PPUSH
7608: CALL_OW 337
// us_researched := false ;
7612: LD_ADDR_EXP 59
7616: PUSH
7617: LD_INT 0
7619: ST_TO_ADDR
// us_researched := true ;
7620: LD_ADDR_EXP 59
7624: PUSH
7625: LD_INT 1
7627: ST_TO_ADDR
// omar_in_contact := false ;
7628: LD_ADDR_EXP 62
7632: PUSH
7633: LD_INT 0
7635: ST_TO_ADDR
// alien_tower_spoted := false ;
7636: LD_ADDR_LOC 10
7640: PUSH
7641: LD_INT 0
7643: ST_TO_ADDR
// one_enabled := false ;
7644: LD_ADDR_EXP 61
7648: PUSH
7649: LD_INT 0
7651: ST_TO_ADDR
// end ;
7652: LD_VAR 0 1
7656: RET
// every 0 0$2.3 trigger See ( you , al_tower ) do var un , sol , sci ;
7657: LD_EXP 1
7661: PPUSH
7662: LD_INT 108
7664: PPUSH
7665: CALL_OW 292
7669: IFFALSE 8175
7671: GO 7673
7673: DISABLE
7674: LD_INT 0
7676: PPUSH
7677: PPUSH
7678: PPUSH
// begin repeat wait ( 0 0$1 ) ;
7679: LD_INT 35
7681: PPUSH
7682: CALL_OW 67
// until not FilterAllUnits ( [ [ f_side , ar ] , [ f_type , unit_human ] , [ f_ok ] , f_not , [ f_inside ] ] ) ;
7686: LD_INT 22
7688: PUSH
7689: LD_EXP 4
7693: PUSH
7694: EMPTY
7695: LIST
7696: LIST
7697: PUSH
7698: LD_INT 21
7700: PUSH
7701: LD_INT 1
7703: PUSH
7704: EMPTY
7705: LIST
7706: LIST
7707: PUSH
7708: LD_INT 50
7710: PUSH
7711: EMPTY
7712: LIST
7713: PUSH
7714: LD_INT 3
7716: PUSH
7717: LD_INT 54
7719: PUSH
7720: EMPTY
7721: LIST
7722: PUSH
7723: EMPTY
7724: LIST
7725: LIST
7726: LIST
7727: LIST
7728: LIST
7729: PPUSH
7730: CALL_OW 69
7734: NOT
7735: IFFALSE 7679
// wait ( 0 0$1 ) ;
7737: LD_INT 35
7739: PPUSH
7740: CALL_OW 67
// cpu_list := cpu_list diff ar ;
7744: LD_ADDR_EXP 8
7748: PUSH
7749: LD_EXP 8
7753: PUSH
7754: LD_EXP 4
7758: DIFF
7759: ST_TO_ADDR
// un := FilterAllUnits ( [ [ f_side , you ] , [ f_sex , sex_male ] ] ) diff [ MacMillan , Burlak , Roth , Gossudarov , 0 ] ;
7760: LD_ADDR_VAR 0 1
7764: PUSH
7765: LD_INT 22
7767: PUSH
7768: LD_EXP 1
7772: PUSH
7773: EMPTY
7774: LIST
7775: LIST
7776: PUSH
7777: LD_INT 26
7779: PUSH
7780: LD_INT 1
7782: PUSH
7783: EMPTY
7784: LIST
7785: LIST
7786: PUSH
7787: EMPTY
7788: LIST
7789: LIST
7790: PPUSH
7791: CALL_OW 69
7795: PUSH
7796: LD_EXP 13
7800: PUSH
7801: LD_EXP 12
7805: PUSH
7806: LD_EXP 14
7810: PUSH
7811: LD_EXP 15
7815: PUSH
7816: LD_INT 0
7818: PUSH
7819: EMPTY
7820: LIST
7821: LIST
7822: LIST
7823: LIST
7824: LIST
7825: DIFF
7826: ST_TO_ADDR
// if un then
7827: LD_VAR 0 1
7831: IFFALSE 7851
// sol := FindMaxSkill ( un , skill_combat ) ;
7833: LD_ADDR_VAR 0 2
7837: PUSH
7838: LD_VAR 0 1
7842: PPUSH
7843: LD_INT 1
7845: PPUSH
7846: CALL_OW 433
7850: ST_TO_ADDR
// un := FilterAllUnits ( [ [ f_side , you ] , [ f_sex , sex_male ] ] ) diff [ MacMillan , Burlak , Roth , Gossudarov , sol , 0 ] ;
7851: LD_ADDR_VAR 0 1
7855: PUSH
7856: LD_INT 22
7858: PUSH
7859: LD_EXP 1
7863: PUSH
7864: EMPTY
7865: LIST
7866: LIST
7867: PUSH
7868: LD_INT 26
7870: PUSH
7871: LD_INT 1
7873: PUSH
7874: EMPTY
7875: LIST
7876: LIST
7877: PUSH
7878: EMPTY
7879: LIST
7880: LIST
7881: PPUSH
7882: CALL_OW 69
7886: PUSH
7887: LD_EXP 13
7891: PUSH
7892: LD_EXP 12
7896: PUSH
7897: LD_EXP 14
7901: PUSH
7902: LD_EXP 15
7906: PUSH
7907: LD_VAR 0 2
7911: PUSH
7912: LD_INT 0
7914: PUSH
7915: EMPTY
7916: LIST
7917: LIST
7918: LIST
7919: LIST
7920: LIST
7921: LIST
7922: DIFF
7923: ST_TO_ADDR
// if un then
7924: LD_VAR 0 1
7928: IFFALSE 7948
// sci := FindMaxSkill ( un , skill_scientistic ) ;
7930: LD_ADDR_VAR 0 3
7934: PUSH
7935: LD_VAR 0 1
7939: PPUSH
7940: LD_INT 4
7942: PPUSH
7943: CALL_OW 433
7947: ST_TO_ADDR
// PlaceSeeing ( 248 , 183 , you , 10 ) ;
7948: LD_INT 248
7950: PPUSH
7951: LD_INT 183
7953: PPUSH
7954: LD_EXP 1
7958: PPUSH
7959: LD_INT 10
7961: PPUSH
7962: CALL_OW 330
// CenterOnUnits ( al_tower ) ;
7966: LD_INT 108
7968: PPUSH
7969: CALL_OW 85
// DialogueOn ;
7973: CALL_OW 6
// interface_hidden := true ;
7977: LD_ADDR_OWVAR 54
7981: PUSH
7982: LD_INT 1
7984: ST_TO_ADDR
// Say ( sol , DAlienBase-Rsol1-1 ) ;
7985: LD_VAR 0 2
7989: PPUSH
7990: LD_STRING DAlienBase-Rsol1-1
7992: PPUSH
7993: CALL_OW 88
// case camp of 4 :
7997: LD_EXP 7
8001: PUSH
8002: LD_INT 4
8004: DOUBLE
8005: EQUAL
8006: IFTRUE 8010
8008: GO 8061
8010: POP
// begin Say ( MacMillan , DAlienBase-JMM-1 ) ;
8011: LD_EXP 13
8015: PPUSH
8016: LD_STRING DAlienBase-JMM-1
8018: PPUSH
8019: CALL_OW 88
// Say ( Roth , DAlienBase-Roth-1 ) ;
8023: LD_EXP 14
8027: PPUSH
8028: LD_STRING DAlienBase-Roth-1
8030: PPUSH
8031: CALL_OW 88
// if not IsOK ( Roth ) then
8035: LD_EXP 14
8039: PPUSH
8040: CALL_OW 302
8044: NOT
8045: IFFALSE 8059
// Say ( sci , DAlienBase-Sci1-1 ) ;
8047: LD_VAR 0 3
8051: PPUSH
8052: LD_STRING DAlienBase-Sci1-1
8054: PPUSH
8055: CALL_OW 88
// end ; 6 :
8059: GO 8121
8061: LD_INT 6
8063: DOUBLE
8064: EQUAL
8065: IFTRUE 8069
8067: GO 8120
8069: POP
// begin Say ( Burlak , DAlienBase-Bur-1 ) ;
8070: LD_EXP 12
8074: PPUSH
8075: LD_STRING DAlienBase-Bur-1
8077: PPUSH
8078: CALL_OW 88
// Say ( Gossudarov , DAlienBase-Gos-1 ) ;
8082: LD_EXP 15
8086: PPUSH
8087: LD_STRING DAlienBase-Gos-1
8089: PPUSH
8090: CALL_OW 88
// if not IsOK ( Gossudarov ) then
8094: LD_EXP 15
8098: PPUSH
8099: CALL_OW 302
8103: NOT
8104: IFFALSE 8118
// Say ( sci , DAlienBase-Sci1-1 ) ;
8106: LD_VAR 0 3
8110: PPUSH
8111: LD_STRING DAlienBase-Sci1-1
8113: PPUSH
8114: CALL_OW 88
// end ; end ;
8118: GO 8121
8120: POP
// SetSide ( al_tower , you ) ;
8121: LD_INT 108
8123: PPUSH
8124: LD_EXP 1
8128: PPUSH
8129: CALL_OW 235
// RemoveSeeing ( 248 , 183 , you ) ;
8133: LD_INT 248
8135: PPUSH
8136: LD_INT 183
8138: PPUSH
8139: LD_EXP 1
8143: PPUSH
8144: CALL_OW 331
// interface_hidden := false ;
8148: LD_ADDR_OWVAR 54
8152: PUSH
8153: LD_INT 0
8155: ST_TO_ADDR
// DialogueOff ;
8156: CALL_OW 7
// Hint ( ArtefactBuilding ) ;
8160: LD_STRING ArtefactBuilding
8162: PPUSH
8163: CALL_OW 339
// alien_tower_spoted := true ;
8167: LD_ADDR_LOC 10
8171: PUSH
8172: LD_INT 1
8174: ST_TO_ADDR
// end ;
8175: PPOPN 3
8177: END
// every 0 0$4.6 trigger FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_lab ] , [ f_btype , b_lab_half ] ] , [ f_lives , 1000 ] ] ) and alien_tower_spoted do var un , sci ;
8178: LD_INT 22
8180: PUSH
8181: LD_EXP 1
8185: PUSH
8186: EMPTY
8187: LIST
8188: LIST
8189: PUSH
8190: LD_INT 2
8192: PUSH
8193: LD_INT 30
8195: PUSH
8196: LD_INT 6
8198: PUSH
8199: EMPTY
8200: LIST
8201: LIST
8202: PUSH
8203: LD_INT 30
8205: PUSH
8206: LD_INT 7
8208: PUSH
8209: EMPTY
8210: LIST
8211: LIST
8212: PUSH
8213: EMPTY
8214: LIST
8215: LIST
8216: LIST
8217: PUSH
8218: LD_INT 24
8220: PUSH
8221: LD_INT 1000
8223: PUSH
8224: EMPTY
8225: LIST
8226: LIST
8227: PUSH
8228: EMPTY
8229: LIST
8230: LIST
8231: LIST
8232: PPUSH
8233: CALL_OW 69
8237: PUSH
8238: LD_LOC 10
8242: AND
8243: IFFALSE 8511
8245: GO 8247
8247: DISABLE
8248: LD_INT 0
8250: PPUSH
8251: PPUSH
// begin un := FilterAllUnits ( [ [ f_side , you ] , [ f_sex , sex_male ] ] ) diff [ MacMillan , Burlak , Roth , Gossudarov , 0 ] ;
8252: LD_ADDR_VAR 0 1
8256: PUSH
8257: LD_INT 22
8259: PUSH
8260: LD_EXP 1
8264: PUSH
8265: EMPTY
8266: LIST
8267: LIST
8268: PUSH
8269: LD_INT 26
8271: PUSH
8272: LD_INT 1
8274: PUSH
8275: EMPTY
8276: LIST
8277: LIST
8278: PUSH
8279: EMPTY
8280: LIST
8281: LIST
8282: PPUSH
8283: CALL_OW 69
8287: PUSH
8288: LD_EXP 13
8292: PUSH
8293: LD_EXP 12
8297: PUSH
8298: LD_EXP 14
8302: PUSH
8303: LD_EXP 15
8307: PUSH
8308: LD_INT 0
8310: PUSH
8311: EMPTY
8312: LIST
8313: LIST
8314: LIST
8315: LIST
8316: LIST
8317: DIFF
8318: ST_TO_ADDR
// if un then
8319: LD_VAR 0 1
8323: IFFALSE 8343
// sci := FindMaxSkill ( un , skill_scientistic ) ;
8325: LD_ADDR_VAR 0 2
8329: PUSH
8330: LD_VAR 0 1
8334: PPUSH
8335: LD_INT 4
8337: PPUSH
8338: CALL_OW 433
8342: ST_TO_ADDR
// CenterOnUnits ( al_tower ) ;
8343: LD_INT 108
8345: PPUSH
8346: CALL_OW 85
// DialogueOn ;
8350: CALL_OW 6
// interface_hidden := true ;
8354: LD_ADDR_OWVAR 54
8358: PUSH
8359: LD_INT 1
8361: ST_TO_ADDR
// case camp of 4 :
8362: LD_EXP 7
8366: PUSH
8367: LD_INT 4
8369: DOUBLE
8370: EQUAL
8371: IFTRUE 8375
8373: GO 8415
8375: POP
// if IsOK ( Gossudarov ) then
8376: LD_EXP 15
8380: PPUSH
8381: CALL_OW 302
8385: IFFALSE 8401
// Say ( Gossudarov , DAlieBaseNotReady-Gos-1 ) else
8387: LD_EXP 15
8391: PPUSH
8392: LD_STRING DAlieBaseNotReady-Gos-1
8394: PPUSH
8395: CALL_OW 88
8399: GO 8413
// Say ( Roth , DAlieBaseNotReady-Roth-1 ) ; 6 :
8401: LD_EXP 14
8405: PPUSH
8406: LD_STRING DAlieBaseNotReady-Roth-1
8408: PPUSH
8409: CALL_OW 88
8413: GO 8464
8415: LD_INT 6
8417: DOUBLE
8418: EQUAL
8419: IFTRUE 8423
8421: GO 8463
8423: POP
// if IsOK ( Roth ) then
8424: LD_EXP 14
8428: PPUSH
8429: CALL_OW 302
8433: IFFALSE 8449
// Say ( Roth , DAlieBaseNotReady-Roth-1 ) else
8435: LD_EXP 14
8439: PPUSH
8440: LD_STRING DAlieBaseNotReady-Roth-1
8442: PPUSH
8443: CALL_OW 88
8447: GO 8461
// Say ( Gossudarov , DAlieBaseNotReady-Gos-1 ) ; end ;
8449: LD_EXP 15
8453: PPUSH
8454: LD_STRING DAlieBaseNotReady-Gos-1
8456: PPUSH
8457: CALL_OW 88
8461: GO 8464
8463: POP
// if not ( IsOK ( Gossudarov ) or IsOK ( Roth ) ) then
8464: LD_EXP 15
8468: PPUSH
8469: CALL_OW 302
8473: PUSH
8474: LD_EXP 14
8478: PPUSH
8479: CALL_OW 302
8483: OR
8484: NOT
8485: IFFALSE 8499
// Say ( sci , DAlieBaseNotReady-RSci1-1 ) ;
8487: LD_VAR 0 2
8491: PPUSH
8492: LD_STRING DAlieBaseNotReady-RSci1-1
8494: PPUSH
8495: CALL_OW 88
// interface_hidden := false ;
8499: LD_ADDR_OWVAR 54
8503: PUSH
8504: LD_INT 0
8506: ST_TO_ADDR
// DialogueOff ;
8507: CALL_OW 7
// end ;
8511: PPOPN 2
8513: END
// every 0 0$8.7 trigger GetTech ( tech_Artifact , you ) = state_researched do var un , lab , list ;
8514: LD_INT 24
8516: PPUSH
8517: LD_EXP 1
8521: PPUSH
8522: CALL_OW 321
8526: PUSH
8527: LD_INT 2
8529: EQUAL
8530: IFFALSE 8668
8532: GO 8534
8534: DISABLE
8535: LD_INT 0
8537: PPUSH
8538: PPUSH
8539: PPUSH
// begin list := FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_lab ] , [ f_btype , b_lab_half ] , [ f_btype , b_lab_full ] ] ] ) ;
8540: LD_ADDR_VAR 0 3
8544: PUSH
8545: LD_INT 22
8547: PUSH
8548: LD_EXP 1
8552: PUSH
8553: EMPTY
8554: LIST
8555: LIST
8556: PUSH
8557: LD_INT 2
8559: PUSH
8560: LD_INT 30
8562: PUSH
8563: LD_INT 6
8565: PUSH
8566: EMPTY
8567: LIST
8568: LIST
8569: PUSH
8570: LD_INT 30
8572: PUSH
8573: LD_INT 7
8575: PUSH
8576: EMPTY
8577: LIST
8578: LIST
8579: PUSH
8580: LD_INT 30
8582: PUSH
8583: LD_INT 8
8585: PUSH
8586: EMPTY
8587: LIST
8588: LIST
8589: PUSH
8590: EMPTY
8591: LIST
8592: LIST
8593: LIST
8594: LIST
8595: PUSH
8596: EMPTY
8597: LIST
8598: LIST
8599: PPUSH
8600: CALL_OW 69
8604: ST_TO_ADDR
// lab := false ;
8605: LD_ADDR_VAR 0 2
8609: PUSH
8610: LD_INT 0
8612: ST_TO_ADDR
// for un in list do
8613: LD_ADDR_VAR 0 1
8617: PUSH
8618: LD_VAR 0 3
8622: PUSH
8623: FOR_IN
8624: IFFALSE 8653
// if GetLives ( un ) = 1000 then
8626: LD_VAR 0 1
8630: PPUSH
8631: CALL_OW 256
8635: PUSH
8636: LD_INT 1000
8638: EQUAL
8639: IFFALSE 8651
// lab := un ;
8641: LD_ADDR_VAR 0 2
8645: PUSH
8646: LD_VAR 0 1
8650: ST_TO_ADDR
8651: GO 8623
8653: POP
8654: POP
// if lab then
8655: LD_VAR 0 2
8659: IFFALSE 8667
// begin Talking_About_Artefact ;
8661: CALL 8671 0 0
// exit ;
8665: GO 8668
// end ; enable ;
8667: ENABLE
// end ;
8668: PPOPN 3
8670: END
// export function Talking_About_Artefact ; var un , ru_sci , us_sci , your_depot ; begin
8671: LD_INT 0
8673: PPUSH
8674: PPUSH
8675: PPUSH
8676: PPUSH
8677: PPUSH
// un := FilterAllUnits ( [ [ f_side , you ] , [ f_nation , nation_russian ] , [ f_sex , sex_male ] ] ) ;
8678: LD_ADDR_VAR 0 2
8682: PUSH
8683: LD_INT 22
8685: PUSH
8686: LD_EXP 1
8690: PUSH
8691: EMPTY
8692: LIST
8693: LIST
8694: PUSH
8695: LD_INT 23
8697: PUSH
8698: LD_INT 3
8700: PUSH
8701: EMPTY
8702: LIST
8703: LIST
8704: PUSH
8705: LD_INT 26
8707: PUSH
8708: LD_INT 1
8710: PUSH
8711: EMPTY
8712: LIST
8713: LIST
8714: PUSH
8715: EMPTY
8716: LIST
8717: LIST
8718: LIST
8719: PPUSH
8720: CALL_OW 69
8724: ST_TO_ADDR
// un := un diff [ MacMillan , Burlak , Roth , Gossudarov , 0 ] ;
8725: LD_ADDR_VAR 0 2
8729: PUSH
8730: LD_VAR 0 2
8734: PUSH
8735: LD_EXP 13
8739: PUSH
8740: LD_EXP 12
8744: PUSH
8745: LD_EXP 14
8749: PUSH
8750: LD_EXP 15
8754: PUSH
8755: LD_INT 0
8757: PUSH
8758: EMPTY
8759: LIST
8760: LIST
8761: LIST
8762: LIST
8763: LIST
8764: DIFF
8765: ST_TO_ADDR
// if un then
8766: LD_VAR 0 2
8770: IFFALSE 8790
// ru_sci := FindMaxSkill ( un , skill_scientistic ) ;
8772: LD_ADDR_VAR 0 3
8776: PUSH
8777: LD_VAR 0 2
8781: PPUSH
8782: LD_INT 4
8784: PPUSH
8785: CALL_OW 433
8789: ST_TO_ADDR
// un := FilterAllUnits ( [ [ f_side , you ] , [ f_nation , nation_american ] , [ f_sex , sex_male ] ] ) ;
8790: LD_ADDR_VAR 0 2
8794: PUSH
8795: LD_INT 22
8797: PUSH
8798: LD_EXP 1
8802: PUSH
8803: EMPTY
8804: LIST
8805: LIST
8806: PUSH
8807: LD_INT 23
8809: PUSH
8810: LD_INT 1
8812: PUSH
8813: EMPTY
8814: LIST
8815: LIST
8816: PUSH
8817: LD_INT 26
8819: PUSH
8820: LD_INT 1
8822: PUSH
8823: EMPTY
8824: LIST
8825: LIST
8826: PUSH
8827: EMPTY
8828: LIST
8829: LIST
8830: LIST
8831: PPUSH
8832: CALL_OW 69
8836: ST_TO_ADDR
// un := un diff [ MacMillan , Burlak , Roth , Gossudarov , 0 ] ;
8837: LD_ADDR_VAR 0 2
8841: PUSH
8842: LD_VAR 0 2
8846: PUSH
8847: LD_EXP 13
8851: PUSH
8852: LD_EXP 12
8856: PUSH
8857: LD_EXP 14
8861: PUSH
8862: LD_EXP 15
8866: PUSH
8867: LD_INT 0
8869: PUSH
8870: EMPTY
8871: LIST
8872: LIST
8873: LIST
8874: LIST
8875: LIST
8876: DIFF
8877: ST_TO_ADDR
// if un then
8878: LD_VAR 0 2
8882: IFFALSE 8902
// us_sci := FindMaxSkill ( un , skill_scientistic ) ;
8884: LD_ADDR_VAR 0 4
8888: PUSH
8889: LD_VAR 0 2
8893: PPUSH
8894: LD_INT 4
8896: PPUSH
8897: CALL_OW 433
8901: ST_TO_ADDR
// un := FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) ;
8902: LD_ADDR_VAR 0 2
8906: PUSH
8907: LD_INT 22
8909: PUSH
8910: LD_EXP 1
8914: PUSH
8915: EMPTY
8916: LIST
8917: LIST
8918: PUSH
8919: LD_INT 2
8921: PUSH
8922: LD_INT 30
8924: PUSH
8925: LD_INT 0
8927: PUSH
8928: EMPTY
8929: LIST
8930: LIST
8931: PUSH
8932: LD_INT 30
8934: PUSH
8935: LD_INT 1
8937: PUSH
8938: EMPTY
8939: LIST
8940: LIST
8941: PUSH
8942: EMPTY
8943: LIST
8944: LIST
8945: LIST
8946: PUSH
8947: EMPTY
8948: LIST
8949: LIST
8950: PPUSH
8951: CALL_OW 69
8955: ST_TO_ADDR
// if un then
8956: LD_VAR 0 2
8960: IFFALSE 8976
// your_depot := un [ 1 ] ;
8962: LD_ADDR_VAR 0 5
8966: PUSH
8967: LD_VAR 0 2
8971: PUSH
8972: LD_INT 1
8974: ARRAY
8975: ST_TO_ADDR
// CenterOnUnits ( Burlak ) ;
8976: LD_EXP 12
8980: PPUSH
8981: CALL_OW 85
// DialogueOn ;
8985: CALL_OW 6
// interface_hidden := true ;
8989: LD_ADDR_OWVAR 54
8993: PUSH
8994: LD_INT 1
8996: ST_TO_ADDR
// Say ( ru_sci , DArtefTechnology-RSci1-1 ) ;
8997: LD_VAR 0 3
9001: PPUSH
9002: LD_STRING DArtefTechnology-RSci1-1
9004: PPUSH
9005: CALL_OW 88
// Say ( Burlak , DArtefTechnology-Bur-1 ) ;
9009: LD_EXP 12
9013: PPUSH
9014: LD_STRING DArtefTechnology-Bur-1
9016: PPUSH
9017: CALL_OW 88
// Say ( ru_sci , DArtefTechnology-RSci1-2 ) ;
9021: LD_VAR 0 3
9025: PPUSH
9026: LD_STRING DArtefTechnology-RSci1-2
9028: PPUSH
9029: CALL_OW 88
// Say ( us_sci , DArtefTechnology-Sci1-2 ) ;
9033: LD_VAR 0 4
9037: PPUSH
9038: LD_STRING DArtefTechnology-Sci1-2
9040: PPUSH
9041: CALL_OW 88
// case camp of 4 :
9045: LD_EXP 7
9049: PUSH
9050: LD_INT 4
9052: DOUBLE
9053: EQUAL
9054: IFTRUE 9058
9056: GO 9073
9058: POP
// Say ( MacMillan , DArtefTechnology-JMM-2 ) ; 6 :
9059: LD_EXP 13
9063: PPUSH
9064: LD_STRING DArtefTechnology-JMM-2
9066: PPUSH
9067: CALL_OW 88
9071: GO 9097
9073: LD_INT 6
9075: DOUBLE
9076: EQUAL
9077: IFTRUE 9081
9079: GO 9096
9081: POP
// Say ( Burlak , DArtefTechnology-Bur-2 ) ; end ;
9082: LD_EXP 12
9086: PPUSH
9087: LD_STRING DArtefTechnology-Bur-2
9089: PPUSH
9090: CALL_OW 88
9094: GO 9097
9096: POP
// Say ( ru_sci , DArtefTechnology-RSci1-3 ) ;
9097: LD_VAR 0 3
9101: PPUSH
9102: LD_STRING DArtefTechnology-RSci1-3
9104: PPUSH
9105: CALL_OW 88
// if GetDistUnits ( your_depot , al_tower ) < 30 then
9109: LD_VAR 0 5
9113: PPUSH
9114: LD_INT 108
9116: PPUSH
9117: CALL_OW 296
9121: PUSH
9122: LD_INT 30
9124: LESS
9125: IFFALSE 9141
// Say ( us_sci , DArtefTechnology-Sci1-3 ) else
9127: LD_VAR 0 4
9131: PPUSH
9132: LD_STRING DArtefTechnology-Sci1-3
9134: PPUSH
9135: CALL_OW 88
9139: GO 9153
// Say ( us_sci , DArtefTechnology-Sci1-3a ) ;
9141: LD_VAR 0 4
9145: PPUSH
9146: LD_STRING DArtefTechnology-Sci1-3a
9148: PPUSH
9149: CALL_OW 88
// interface_hidden := false ;
9153: LD_ADDR_OWVAR 54
9157: PUSH
9158: LD_INT 0
9160: ST_TO_ADDR
// DialogueOff ;
9161: CALL_OW 7
// end ; end_of_file
9165: LD_VAR 0 1
9169: RET
// export us_researched , ru_researched ; export one_enabled ; every 0 0$1.1 do var un , sci ;
9170: GO 9172
9172: DISABLE
9173: LD_INT 0
9175: PPUSH
9176: PPUSH
// begin exit ;
9177: GO 9423
// un := FilterAllUnits ( [ [ f_side , you ] , [ f_nation , nation_american ] , [ f_sex , sex_male ] ] ) ;
9179: LD_ADDR_VAR 0 1
9183: PUSH
9184: LD_INT 22
9186: PUSH
9187: LD_EXP 1
9191: PUSH
9192: EMPTY
9193: LIST
9194: LIST
9195: PUSH
9196: LD_INT 23
9198: PUSH
9199: LD_INT 1
9201: PUSH
9202: EMPTY
9203: LIST
9204: LIST
9205: PUSH
9206: LD_INT 26
9208: PUSH
9209: LD_INT 1
9211: PUSH
9212: EMPTY
9213: LIST
9214: LIST
9215: PUSH
9216: EMPTY
9217: LIST
9218: LIST
9219: LIST
9220: PPUSH
9221: CALL_OW 69
9225: ST_TO_ADDR
// un := un diff [ MacMillan , Burlak , Roth , Gossudarov , 0 ] ;
9226: LD_ADDR_VAR 0 1
9230: PUSH
9231: LD_VAR 0 1
9235: PUSH
9236: LD_EXP 13
9240: PUSH
9241: LD_EXP 12
9245: PUSH
9246: LD_EXP 14
9250: PUSH
9251: LD_EXP 15
9255: PUSH
9256: LD_INT 0
9258: PUSH
9259: EMPTY
9260: LIST
9261: LIST
9262: LIST
9263: LIST
9264: LIST
9265: DIFF
9266: ST_TO_ADDR
// if un then
9267: LD_VAR 0 1
9271: IFFALSE 9291
// sci := FindMaxSkill ( un , skill_scientistic ) ;
9273: LD_ADDR_VAR 0 2
9277: PUSH
9278: LD_VAR 0 1
9282: PPUSH
9283: LD_INT 4
9285: PPUSH
9286: CALL_OW 433
9290: ST_TO_ADDR
// CenterOnUnits ( [ MacMillan , Burlak ] ) ;
9291: LD_EXP 13
9295: PUSH
9296: LD_EXP 12
9300: PUSH
9301: EMPTY
9302: LIST
9303: LIST
9304: PPUSH
9305: CALL_OW 85
// DialogueOn ;
9309: CALL_OW 6
// interface_hidden := true ;
9313: LD_ADDR_OWVAR 54
9317: PUSH
9318: LD_INT 1
9320: ST_TO_ADDR
// Say ( sci , DArtefTechnologyAm-Sci1-1 ) ;
9321: LD_VAR 0 2
9325: PPUSH
9326: LD_STRING DArtefTechnologyAm-Sci1-1
9328: PPUSH
9329: CALL_OW 88
// case camp of 4 :
9333: LD_EXP 7
9337: PUSH
9338: LD_INT 4
9340: DOUBLE
9341: EQUAL
9342: IFTRUE 9346
9344: GO 9361
9346: POP
// Say ( MacMillan , DArtefTechnologyAm-JMM-1 ) ; 6 :
9347: LD_EXP 13
9351: PPUSH
9352: LD_STRING DArtefTechnologyAm-JMM-1
9354: PPUSH
9355: CALL_OW 88
9359: GO 9385
9361: LD_INT 6
9363: DOUBLE
9364: EQUAL
9365: IFTRUE 9369
9367: GO 9384
9369: POP
// Say ( Burlak , DArtefTechnologyAm-Bur-1 ) ; end ;
9370: LD_EXP 12
9374: PPUSH
9375: LD_STRING DArtefTechnologyAm-Bur-1
9377: PPUSH
9378: CALL_OW 88
9382: GO 9385
9384: POP
// interface_hidden := false ;
9385: LD_ADDR_OWVAR 54
9389: PUSH
9390: LD_INT 0
9392: ST_TO_ADDR
// DialogueOff ;
9393: CALL_OW 7
// if not one_enabled then
9397: LD_EXP 61
9401: NOT
9402: IFFALSE 9415
// begin enable ( 1 ) ;
9404: LD_INT 1
9406: ENABLE_MARKED
// one_enabled := true ;
9407: LD_ADDR_EXP 61
9411: PUSH
9412: LD_INT 1
9414: ST_TO_ADDR
// end ; us_researched := true ;
9415: LD_ADDR_EXP 59
9419: PUSH
9420: LD_INT 1
9422: ST_TO_ADDR
// end ;
9423: PPOPN 2
9425: END
// every 0 0$1.3 do var un , sci ;
9426: GO 9428
9428: DISABLE
9429: LD_INT 0
9431: PPUSH
9432: PPUSH
// begin exit ;
9433: GO 9691
// un := FilterAllUnits ( [ [ f_side , you ] , [ f_nation , nation_russian ] , [ f_sex , sex_male ] ] ) ;
9435: LD_ADDR_VAR 0 1
9439: PUSH
9440: LD_INT 22
9442: PUSH
9443: LD_EXP 1
9447: PUSH
9448: EMPTY
9449: LIST
9450: LIST
9451: PUSH
9452: LD_INT 23
9454: PUSH
9455: LD_INT 3
9457: PUSH
9458: EMPTY
9459: LIST
9460: LIST
9461: PUSH
9462: LD_INT 26
9464: PUSH
9465: LD_INT 1
9467: PUSH
9468: EMPTY
9469: LIST
9470: LIST
9471: PUSH
9472: EMPTY
9473: LIST
9474: LIST
9475: LIST
9476: PPUSH
9477: CALL_OW 69
9481: ST_TO_ADDR
// un := un diff [ MacMillan , Burlak , Roth , Gossudarov , 0 ] ;
9482: LD_ADDR_VAR 0 1
9486: PUSH
9487: LD_VAR 0 1
9491: PUSH
9492: LD_EXP 13
9496: PUSH
9497: LD_EXP 12
9501: PUSH
9502: LD_EXP 14
9506: PUSH
9507: LD_EXP 15
9511: PUSH
9512: LD_INT 0
9514: PUSH
9515: EMPTY
9516: LIST
9517: LIST
9518: LIST
9519: LIST
9520: LIST
9521: DIFF
9522: ST_TO_ADDR
// if un then
9523: LD_VAR 0 1
9527: IFFALSE 9547
// sci := FindMaxSkill ( un , skill_scientistic ) ;
9529: LD_ADDR_VAR 0 2
9533: PUSH
9534: LD_VAR 0 1
9538: PPUSH
9539: LD_INT 4
9541: PPUSH
9542: CALL_OW 433
9546: ST_TO_ADDR
// CenterOnUnits ( [ MacMillan , sci ] ) ;
9547: LD_EXP 13
9551: PUSH
9552: LD_VAR 0 2
9556: PUSH
9557: EMPTY
9558: LIST
9559: LIST
9560: PPUSH
9561: CALL_OW 85
// DialogueOn ;
9565: CALL_OW 6
// interface_hidden := true ;
9569: LD_ADDR_OWVAR 54
9573: PUSH
9574: LD_INT 1
9576: ST_TO_ADDR
// Say ( sci , DArtefTechnologyRu-RSci1-1 ) ;
9577: LD_VAR 0 2
9581: PPUSH
9582: LD_STRING DArtefTechnologyRu-RSci1-1
9584: PPUSH
9585: CALL_OW 88
// case camp of 4 :
9589: LD_EXP 7
9593: PUSH
9594: LD_INT 4
9596: DOUBLE
9597: EQUAL
9598: IFTRUE 9602
9600: GO 9617
9602: POP
// Say ( MacMillan , DArtefTechnologyRu-JMM-1 ) ; 6 :
9603: LD_EXP 13
9607: PPUSH
9608: LD_STRING DArtefTechnologyRu-JMM-1
9610: PPUSH
9611: CALL_OW 88
9615: GO 9641
9617: LD_INT 6
9619: DOUBLE
9620: EQUAL
9621: IFTRUE 9625
9623: GO 9640
9625: POP
// Say ( Burlak , DArtefTechnologyRu-Bur-1 ) ; end ;
9626: LD_EXP 12
9630: PPUSH
9631: LD_STRING DArtefTechnologyRu-Bur-1
9633: PPUSH
9634: CALL_OW 88
9638: GO 9641
9640: POP
// Say ( sci , DArtefTechnologyRu-RSci1-2 ) ;
9641: LD_VAR 0 2
9645: PPUSH
9646: LD_STRING DArtefTechnologyRu-RSci1-2
9648: PPUSH
9649: CALL_OW 88
// interface_hidden := false ;
9653: LD_ADDR_OWVAR 54
9657: PUSH
9658: LD_INT 0
9660: ST_TO_ADDR
// DialogueOff ;
9661: CALL_OW 7
// if not one_enabled then
9665: LD_EXP 61
9669: NOT
9670: IFFALSE 9683
// begin enable ( 1 ) ;
9672: LD_INT 1
9674: ENABLE_MARKED
// one_enabled := true ;
9675: LD_ADDR_EXP 61
9679: PUSH
9680: LD_INT 1
9682: ST_TO_ADDR
// end ; ru_researched := true ;
9683: LD_ADDR_EXP 60
9687: PUSH
9688: LD_INT 1
9690: ST_TO_ADDR
// end ;
9691: PPOPN 2
9693: END
// every 0 0$5.3 trigger ( GetSide ( al_tower ) = you ) and ( GetTag ( 81 ) or GetTag ( 181 ) ) marked 1 do var un , sci ;
9694: LD_INT 108
9696: PPUSH
9697: CALL_OW 255
9701: PUSH
9702: LD_EXP 1
9706: EQUAL
9707: PUSH
9708: LD_INT 81
9710: PPUSH
9711: CALL_OW 110
9715: PUSH
9716: LD_INT 181
9718: PPUSH
9719: CALL_OW 110
9723: OR
9724: AND
9725: IFFALSE 9969
9727: GO 9729
9729: DISABLE
9730: LD_INT 0
9732: PPUSH
9733: PPUSH
// begin un := [ ] ;
9734: LD_ADDR_VAR 0 1
9738: PUSH
9739: EMPTY
9740: ST_TO_ADDR
// if us_researched then
9741: LD_EXP 59
9745: IFFALSE 9800
// un := un ^ FilterAllUnits ( [ [ f_side , you ] , [ f_nation , nation_american ] , [ f_sex , sex_male ] ] ) ;
9747: LD_ADDR_VAR 0 1
9751: PUSH
9752: LD_VAR 0 1
9756: PUSH
9757: LD_INT 22
9759: PUSH
9760: LD_EXP 1
9764: PUSH
9765: EMPTY
9766: LIST
9767: LIST
9768: PUSH
9769: LD_INT 23
9771: PUSH
9772: LD_INT 1
9774: PUSH
9775: EMPTY
9776: LIST
9777: LIST
9778: PUSH
9779: LD_INT 26
9781: PUSH
9782: LD_INT 1
9784: PUSH
9785: EMPTY
9786: LIST
9787: LIST
9788: PUSH
9789: EMPTY
9790: LIST
9791: LIST
9792: LIST
9793: PPUSH
9794: CALL_OW 69
9798: ADD
9799: ST_TO_ADDR
// if ru_researched then
9800: LD_EXP 60
9804: IFFALSE 9859
// un := un ^ FilterAllUnits ( [ [ f_side , you ] , [ f_nation , nation_russian ] , [ f_sex , sex_male ] ] ) ;
9806: LD_ADDR_VAR 0 1
9810: PUSH
9811: LD_VAR 0 1
9815: PUSH
9816: LD_INT 22
9818: PUSH
9819: LD_EXP 1
9823: PUSH
9824: EMPTY
9825: LIST
9826: LIST
9827: PUSH
9828: LD_INT 23
9830: PUSH
9831: LD_INT 3
9833: PUSH
9834: EMPTY
9835: LIST
9836: LIST
9837: PUSH
9838: LD_INT 26
9840: PUSH
9841: LD_INT 1
9843: PUSH
9844: EMPTY
9845: LIST
9846: LIST
9847: PUSH
9848: EMPTY
9849: LIST
9850: LIST
9851: LIST
9852: PPUSH
9853: CALL_OW 69
9857: ADD
9858: ST_TO_ADDR
// un := un diff [ MacMillan , Burlak , Roth , Gossudarov , 0 ] ;
9859: LD_ADDR_VAR 0 1
9863: PUSH
9864: LD_VAR 0 1
9868: PUSH
9869: LD_EXP 13
9873: PUSH
9874: LD_EXP 12
9878: PUSH
9879: LD_EXP 14
9883: PUSH
9884: LD_EXP 15
9888: PUSH
9889: LD_INT 0
9891: PUSH
9892: EMPTY
9893: LIST
9894: LIST
9895: LIST
9896: LIST
9897: LIST
9898: DIFF
9899: ST_TO_ADDR
// if un then
9900: LD_VAR 0 1
9904: IFFALSE 9924
// sci := FindMaxSkill ( un , skill_scientistic ) ;
9906: LD_ADDR_VAR 0 2
9910: PUSH
9911: LD_VAR 0 1
9915: PPUSH
9916: LD_INT 4
9918: PPUSH
9919: CALL_OW 433
9923: ST_TO_ADDR
// CenterOnUnits ( sci ) ;
9924: LD_VAR 0 2
9928: PPUSH
9929: CALL_OW 85
// DialogueOn ;
9933: CALL_OW 6
// interface_hidden := true ;
9937: LD_ADDR_OWVAR 54
9941: PUSH
9942: LD_INT 1
9944: ST_TO_ADDR
// Say ( sci , DArtefTechnologyArStart-Sci1-1 ) ;
9945: LD_VAR 0 2
9949: PPUSH
9950: LD_STRING DArtefTechnologyArStart-Sci1-1
9952: PPUSH
9953: CALL_OW 88
// interface_hidden := false ;
9957: LD_ADDR_OWVAR 54
9961: PUSH
9962: LD_INT 0
9964: ST_TO_ADDR
// DialogueOff ;
9965: CALL_OW 7
// end ;
9969: PPOPN 2
9971: END
// every 0 0$3.9 trigger GetTag ( 281 ) do var un , sci ;
9972: LD_INT 281
9974: PPUSH
9975: CALL_OW 110
9979: IFFALSE 10336
9981: GO 9983
9983: DISABLE
9984: LD_INT 0
9986: PPUSH
9987: PPUSH
// begin un := FilterAllUnits ( [ [ f_side , you ] , [ f_nation , nation_russian ] , [ f_sex , sex_male ] ] ) ;
9988: LD_ADDR_VAR 0 1
9992: PUSH
9993: LD_INT 22
9995: PUSH
9996: LD_EXP 1
10000: PUSH
10001: EMPTY
10002: LIST
10003: LIST
10004: PUSH
10005: LD_INT 23
10007: PUSH
10008: LD_INT 3
10010: PUSH
10011: EMPTY
10012: LIST
10013: LIST
10014: PUSH
10015: LD_INT 26
10017: PUSH
10018: LD_INT 1
10020: PUSH
10021: EMPTY
10022: LIST
10023: LIST
10024: PUSH
10025: EMPTY
10026: LIST
10027: LIST
10028: LIST
10029: PPUSH
10030: CALL_OW 69
10034: ST_TO_ADDR
// un := un diff [ MacMillan , Burlak , Roth , Gossudarov , 0 ] ;
10035: LD_ADDR_VAR 0 1
10039: PUSH
10040: LD_VAR 0 1
10044: PUSH
10045: LD_EXP 13
10049: PUSH
10050: LD_EXP 12
10054: PUSH
10055: LD_EXP 14
10059: PUSH
10060: LD_EXP 15
10064: PUSH
10065: LD_INT 0
10067: PUSH
10068: EMPTY
10069: LIST
10070: LIST
10071: LIST
10072: LIST
10073: LIST
10074: DIFF
10075: ST_TO_ADDR
// if un then
10076: LD_VAR 0 1
10080: IFFALSE 10100
// sci := FindMaxSkill ( un , skill_scientistic ) ;
10082: LD_ADDR_VAR 0 2
10086: PUSH
10087: LD_VAR 0 1
10091: PPUSH
10092: LD_INT 4
10094: PPUSH
10095: CALL_OW 433
10099: ST_TO_ADDR
// CenterOnUnits ( [ MacMillan , Burlak , sci ] ) ;
10100: LD_EXP 13
10104: PUSH
10105: LD_EXP 12
10109: PUSH
10110: LD_VAR 0 2
10114: PUSH
10115: EMPTY
10116: LIST
10117: LIST
10118: LIST
10119: PPUSH
10120: CALL_OW 85
// DialogueOn ;
10124: CALL_OW 6
// interface_hidden := true ;
10128: LD_ADDR_OWVAR 54
10132: PUSH
10133: LD_INT 1
10135: ST_TO_ADDR
// Say ( sci , DArtefTechnologyAr-RSci1-1 ) ;
10136: LD_VAR 0 2
10140: PPUSH
10141: LD_STRING DArtefTechnologyAr-RSci1-1
10143: PPUSH
10144: CALL_OW 88
// case camp of 4 :
10148: LD_EXP 7
10152: PUSH
10153: LD_INT 4
10155: DOUBLE
10156: EQUAL
10157: IFTRUE 10161
10159: GO 10176
10161: POP
// Say ( MacMillan , DArtefTechnologyAr-JMM-1 ) ; 6 :
10162: LD_EXP 13
10166: PPUSH
10167: LD_STRING DArtefTechnologyAr-JMM-1
10169: PPUSH
10170: CALL_OW 88
10174: GO 10200
10176: LD_INT 6
10178: DOUBLE
10179: EQUAL
10180: IFTRUE 10184
10182: GO 10199
10184: POP
// Say ( Burlak , DArtefTechnologyAr-Bur-1 ) ; end ;
10185: LD_EXP 12
10189: PPUSH
10190: LD_STRING DArtefTechnologyAr-Bur-1
10192: PPUSH
10193: CALL_OW 88
10197: GO 10200
10199: POP
// Say ( sci , DArtefTechnologyAr-RSci1-2 ) ;
10200: LD_VAR 0 2
10204: PPUSH
10205: LD_STRING DArtefTechnologyAr-RSci1-2
10207: PPUSH
10208: CALL_OW 88
// case camp of 4 :
10212: LD_EXP 7
10216: PUSH
10217: LD_INT 4
10219: DOUBLE
10220: EQUAL
10221: IFTRUE 10225
10223: GO 10240
10225: POP
// Say ( MacMillan , DArtefTechnologyAr-JMM-2 ) ; 6 :
10226: LD_EXP 13
10230: PPUSH
10231: LD_STRING DArtefTechnologyAr-JMM-2
10233: PPUSH
10234: CALL_OW 88
10238: GO 10264
10240: LD_INT 6
10242: DOUBLE
10243: EQUAL
10244: IFTRUE 10248
10246: GO 10263
10248: POP
// Say ( Burlak , DArtefTechnologyAr-Bur-2 ) ; end ;
10249: LD_EXP 12
10253: PPUSH
10254: LD_STRING DArtefTechnologyAr-Bur-2
10256: PPUSH
10257: CALL_OW 88
10261: GO 10264
10263: POP
// Say ( sci , DArtefTechnologyAr-RSci1-3 ) ;
10264: LD_VAR 0 2
10268: PPUSH
10269: LD_STRING DArtefTechnologyAr-RSci1-3
10271: PPUSH
10272: CALL_OW 88
// Say ( MacMillan , DArtefTechnologyAr-JMM-3 ) ;
10276: LD_EXP 13
10280: PPUSH
10281: LD_STRING DArtefTechnologyAr-JMM-3
10283: PPUSH
10284: CALL_OW 88
// Say ( sci , DArtefTechnologyAr-RSci1-4 ) ;
10288: LD_VAR 0 2
10292: PPUSH
10293: LD_STRING DArtefTechnologyAr-RSci1-4
10295: PPUSH
10296: CALL_OW 88
// Say ( Burlak , DArtefTechnologyAr-Bur-4 ) ;
10300: LD_EXP 12
10304: PPUSH
10305: LD_STRING DArtefTechnologyAr-Bur-4
10307: PPUSH
10308: CALL_OW 88
// Say ( MacMillan , DArtefTechnologyAr-JMM-4 ) ;
10312: LD_EXP 13
10316: PPUSH
10317: LD_STRING DArtefTechnologyAr-JMM-4
10319: PPUSH
10320: CALL_OW 88
// interface_hidden := false ;
10324: LD_ADDR_OWVAR 54
10328: PUSH
10329: LD_INT 0
10331: ST_TO_ADDR
// DialogueOff ;
10332: CALL_OW 7
// end ; end_of_file
10336: PPOPN 2
10338: END
// export omar_in_contact ; var sib_list ; every 2 2$0.4 trigger ( us_researched or ru_researched ) marked 2 do
10339: LD_EXP 59
10343: PUSH
10344: LD_EXP 60
10348: OR
10349: IFFALSE 10775
10351: GO 10353
10353: DISABLE
// begin Omar_Arrive ;
10354: CALL 10776 0 0
// CenterOnUnits ( [ Omar , MacMillan , Burlak ] ) ;
10358: LD_EXP 51
10362: PUSH
10363: LD_EXP 13
10367: PUSH
10368: LD_EXP 12
10372: PUSH
10373: EMPTY
10374: LIST
10375: LIST
10376: LIST
10377: PPUSH
10378: CALL_OW 85
// DialogueOn ;
10382: CALL_OW 6
// interface_hidden := true ;
10386: LD_ADDR_OWVAR 54
10390: PUSH
10391: LD_INT 1
10393: ST_TO_ADDR
// Say ( Omar , DOmar-Omar-1 ) ;
10394: LD_EXP 51
10398: PPUSH
10399: LD_STRING DOmar-Omar-1
10401: PPUSH
10402: CALL_OW 88
// case camp of 4 :
10406: LD_EXP 7
10410: PUSH
10411: LD_INT 4
10413: DOUBLE
10414: EQUAL
10415: IFTRUE 10419
10417: GO 10434
10419: POP
// Say ( MacMillan , DOmar-JMM-1 ) ; 6 :
10420: LD_EXP 13
10424: PPUSH
10425: LD_STRING DOmar-JMM-1
10427: PPUSH
10428: CALL_OW 88
10432: GO 10458
10434: LD_INT 6
10436: DOUBLE
10437: EQUAL
10438: IFTRUE 10442
10440: GO 10457
10442: POP
// Say ( Burlak , DOmar-Bur-1 ) ; end ;
10443: LD_EXP 12
10447: PPUSH
10448: LD_STRING DOmar-Bur-1
10450: PPUSH
10451: CALL_OW 88
10455: GO 10458
10457: POP
// Say ( Omar , DOmar-Omar-2 ) ;
10458: LD_EXP 51
10462: PPUSH
10463: LD_STRING DOmar-Omar-2
10465: PPUSH
10466: CALL_OW 88
// case camp of 4 :
10470: LD_EXP 7
10474: PUSH
10475: LD_INT 4
10477: DOUBLE
10478: EQUAL
10479: IFTRUE 10483
10481: GO 10498
10483: POP
// Say ( MacMillan , DOmar-JMM-2 ) ; 6 :
10484: LD_EXP 13
10488: PPUSH
10489: LD_STRING DOmar-JMM-2
10491: PPUSH
10492: CALL_OW 88
10496: GO 10522
10498: LD_INT 6
10500: DOUBLE
10501: EQUAL
10502: IFTRUE 10506
10504: GO 10521
10506: POP
// Say ( Burlak , DOmar-Bur-2 ) ; end ;
10507: LD_EXP 12
10511: PPUSH
10512: LD_STRING DOmar-Bur-2
10514: PPUSH
10515: CALL_OW 88
10519: GO 10522
10521: POP
// Say ( Omar , DOmar-Omar-3 ) ;
10522: LD_EXP 51
10526: PPUSH
10527: LD_STRING DOmar-Omar-3
10529: PPUSH
10530: CALL_OW 88
// case camp of 4 :
10534: LD_EXP 7
10538: PUSH
10539: LD_INT 4
10541: DOUBLE
10542: EQUAL
10543: IFTRUE 10547
10545: GO 10562
10547: POP
// Say ( MacMillan , DOmar-JMM-3 ) ; 6 :
10548: LD_EXP 13
10552: PPUSH
10553: LD_STRING DOmar-JMM-3
10555: PPUSH
10556: CALL_OW 88
10560: GO 10586
10562: LD_INT 6
10564: DOUBLE
10565: EQUAL
10566: IFTRUE 10570
10568: GO 10585
10570: POP
// Say ( Burlak , DOmar-Bur-3 ) ; end ;
10571: LD_EXP 12
10575: PPUSH
10576: LD_STRING DOmar-Bur-3
10578: PPUSH
10579: CALL_OW 88
10583: GO 10586
10585: POP
// Say ( Omar , DOmar-Omar-4 ) ;
10586: LD_EXP 51
10590: PPUSH
10591: LD_STRING DOmar-Omar-4
10593: PPUSH
10594: CALL_OW 88
// case Query ( QAccept ) of 1 :
10598: LD_STRING QAccept
10600: PPUSH
10601: CALL_OW 97
10605: PUSH
10606: LD_INT 1
10608: DOUBLE
10609: EQUAL
10610: IFTRUE 10614
10612: GO 10695
10614: POP
// begin case camp of 4 :
10615: LD_EXP 7
10619: PUSH
10620: LD_INT 4
10622: DOUBLE
10623: EQUAL
10624: IFTRUE 10628
10626: GO 10643
10628: POP
// Say ( MacMillan , DQrAccept#1-JMM-1 ) ; 6 :
10629: LD_EXP 13
10633: PPUSH
10634: LD_STRING DQrAccept#1-JMM-1
10636: PPUSH
10637: CALL_OW 88
10641: GO 10667
10643: LD_INT 6
10645: DOUBLE
10646: EQUAL
10647: IFTRUE 10651
10649: GO 10666
10651: POP
// Say ( Burlak , DQrAccept#1-Bur-1 ) ; end ;
10652: LD_EXP 12
10656: PPUSH
10657: LD_STRING DQrAccept#1-Bur-1
10659: PPUSH
10660: CALL_OW 88
10664: GO 10667
10666: POP
// SetSide ( Omar , you ) ;
10667: LD_EXP 51
10671: PPUSH
10672: LD_EXP 1
10676: PPUSH
10677: CALL_OW 235
// ComMoveToArea ( Omar , ar_base ) ;
10681: LD_EXP 51
10685: PPUSH
10686: LD_INT 13
10688: PPUSH
10689: CALL_OW 113
// end ; 2 :
10693: GO 10763
10695: LD_INT 2
10697: DOUBLE
10698: EQUAL
10699: IFTRUE 10703
10701: GO 10762
10703: POP
// begin case camp of 4 :
10704: LD_EXP 7
10708: PUSH
10709: LD_INT 4
10711: DOUBLE
10712: EQUAL
10713: IFTRUE 10717
10715: GO 10732
10717: POP
// Say ( MacMillan , DQrAccept#2-JMM-1 ) ; 6 :
10718: LD_EXP 13
10722: PPUSH
10723: LD_STRING DQrAccept#2-JMM-1
10725: PPUSH
10726: CALL_OW 88
10730: GO 10756
10732: LD_INT 6
10734: DOUBLE
10735: EQUAL
10736: IFTRUE 10740
10738: GO 10755
10740: POP
// Say ( Burlak , DQrAccept#2-Bur-1 ) ; end ;
10741: LD_EXP 12
10745: PPUSH
10746: LD_STRING DQrAccept#2-Bur-1
10748: PPUSH
10749: CALL_OW 88
10753: GO 10756
10755: POP
// Omar_Leave ;
10756: CALL 10839 0 0
// end ; end ;
10760: GO 10763
10762: POP
// interface_hidden := false ;
10763: LD_ADDR_OWVAR 54
10767: PUSH
10768: LD_INT 0
10770: ST_TO_ADDR
// DialogueOff ;
10771: CALL_OW 7
// end ;
10775: END
// function Omar_Arrive ; var un ; begin
10776: LD_INT 0
10778: PPUSH
10779: PPUSH
// PlaceUnitArea ( Omar , omar_place , false ) ;
10780: LD_EXP 51
10784: PPUSH
10785: LD_INT 4
10787: PPUSH
10788: LD_INT 0
10790: PPUSH
10791: CALL_OW 49
// SetSide ( Omar , ar ) ;
10795: LD_EXP 51
10799: PPUSH
10800: LD_EXP 4
10804: PPUSH
10805: CALL_OW 235
// ComMoveToArea ( Omar , ar_base ) ;
10809: LD_EXP 51
10813: PPUSH
10814: LD_INT 13
10816: PPUSH
10817: CALL_OW 113
// repeat wait ( 0 0$1 ) ;
10821: LD_INT 35
10823: PPUSH
10824: CALL_OW 67
// until omar_in_contact ;
10828: LD_EXP 62
10832: IFFALSE 10821
// end ;
10834: LD_VAR 0 1
10838: RET
// function Omar_Leave ; begin
10839: LD_INT 0
10841: PPUSH
// repeat ComMoveToArea ( Omar , omar_place ) ;
10842: LD_EXP 51
10846: PPUSH
10847: LD_INT 4
10849: PPUSH
10850: CALL_OW 113
// wait ( 0 0$1 ) ;
10854: LD_INT 35
10856: PPUSH
10857: CALL_OW 67
// until IsInArea ( Omar , omar_place ) ;
10861: LD_EXP 51
10865: PPUSH
10866: LD_INT 4
10868: PPUSH
10869: CALL_OW 308
10873: IFFALSE 10842
// RemoveUnit ( Omar ) ;
10875: LD_EXP 51
10879: PPUSH
10880: CALL_OW 64
// end ;
10884: LD_VAR 0 1
10888: RET
// every 0 0$3.7 trigger not FilterAllUnits ( [ [ f_side , ru ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) marked 3 do var best_sib , see_him ;
10889: LD_INT 22
10891: PUSH
10892: LD_EXP 2
10896: PUSH
10897: EMPTY
10898: LIST
10899: LIST
10900: PUSH
10901: LD_INT 2
10903: PUSH
10904: LD_INT 30
10906: PUSH
10907: LD_INT 0
10909: PUSH
10910: EMPTY
10911: LIST
10912: LIST
10913: PUSH
10914: LD_INT 30
10916: PUSH
10917: LD_INT 1
10919: PUSH
10920: EMPTY
10921: LIST
10922: LIST
10923: PUSH
10924: EMPTY
10925: LIST
10926: LIST
10927: LIST
10928: PUSH
10929: EMPTY
10930: LIST
10931: LIST
10932: PPUSH
10933: CALL_OW 69
10937: NOT
10938: IFFALSE 11158
10940: GO 10942
10942: DISABLE
10943: LD_INT 0
10945: PPUSH
10946: PPUSH
// begin sib_list := get_sib_list ;
10947: LD_ADDR_LOC 11
10951: PUSH
10952: CALL 11471 0 0
10956: ST_TO_ADDR
// best_sib := get_best_sib ( sib_list ) ;
10957: LD_ADDR_VAR 0 1
10961: PUSH
10962: LD_LOC 11
10966: PPUSH
10967: CALL 11611 0 1
10971: ST_TO_ADDR
// PlaceUnitArea ( Omar , omar_infested , false ) ;
10972: LD_EXP 51
10976: PPUSH
10977: LD_INT 5
10979: PPUSH
10980: LD_INT 0
10982: PPUSH
10983: CALL_OW 49
// ComMoveXY ( Omar , best_sib [ 1 ] , best_sib [ 2 ] ) ;
10987: LD_EXP 51
10991: PPUSH
10992: LD_VAR 0 1
10996: PUSH
10997: LD_INT 1
10999: ARRAY
11000: PPUSH
11001: LD_VAR 0 1
11005: PUSH
11006: LD_INT 2
11008: ARRAY
11009: PPUSH
11010: CALL_OW 111
// repeat wait ( 0 0$1 ) ;
11014: LD_INT 35
11016: PPUSH
11017: CALL_OW 67
// until GetDistUnitXY ( Omar , best_sib [ 1 ] , best_sib [ 2 ] ) < 4 ;
11021: LD_EXP 51
11025: PPUSH
11026: LD_VAR 0 1
11030: PUSH
11031: LD_INT 1
11033: ARRAY
11034: PPUSH
11035: LD_VAR 0 1
11039: PUSH
11040: LD_INT 2
11042: ARRAY
11043: PPUSH
11044: CALL_OW 297
11048: PUSH
11049: LD_INT 4
11051: LESS
11052: IFFALSE 11014
// see_him := false ;
11054: LD_ADDR_VAR 0 2
11058: PUSH
11059: LD_INT 0
11061: ST_TO_ADDR
// repeat best_sib := get_best_sib ( sib_list ) ;
11062: LD_ADDR_VAR 0 1
11066: PUSH
11067: LD_LOC 11
11071: PPUSH
11072: CALL 11611 0 1
11076: ST_TO_ADDR
// ComContaminate ( Omar , best_sib [ 1 ] , best_sib [ 2 ] ) ;
11077: LD_EXP 51
11081: PPUSH
11082: LD_VAR 0 1
11086: PUSH
11087: LD_INT 1
11089: ARRAY
11090: PPUSH
11091: LD_VAR 0 1
11095: PUSH
11096: LD_INT 2
11098: ARRAY
11099: PPUSH
11100: CALL_OW 158
// if ( not see_him ) and See ( you , Omar ) then
11104: LD_VAR 0 2
11108: NOT
11109: PUSH
11110: LD_EXP 1
11114: PPUSH
11115: LD_EXP 51
11119: PPUSH
11120: CALL_OW 292
11124: AND
11125: IFFALSE 11139
// begin talking_to_omar ;
11127: CALL 11161 0 0
// see_him := true ;
11131: LD_ADDR_VAR 0 2
11135: PUSH
11136: LD_INT 1
11138: ST_TO_ADDR
// end ; wait ( 0 0$1 ) ;
11139: LD_INT 35
11141: PPUSH
11142: CALL_OW 67
// until not IsOK ( Omar ) ;
11146: LD_EXP 51
11150: PPUSH
11151: CALL_OW 302
11155: NOT
11156: IFFALSE 11062
// end ;
11158: PPOPN 2
11160: END
// function talking_to_omar ; begin
11161: LD_INT 0
11163: PPUSH
// CenterOnUnits ( [ MacMillan , Burlak ] ) ;
11164: LD_EXP 13
11168: PUSH
11169: LD_EXP 12
11173: PUSH
11174: EMPTY
11175: LIST
11176: LIST
11177: PPUSH
11178: CALL_OW 85
// DialogueOn ;
11182: CALL_OW 6
// interface_hidden := true ;
11186: LD_ADDR_OWVAR 54
11190: PUSH
11191: LD_INT 1
11193: ST_TO_ADDR
// case camp of 4 :
11194: LD_EXP 7
11198: PUSH
11199: LD_INT 4
11201: DOUBLE
11202: EQUAL
11203: IFTRUE 11207
11205: GO 11222
11207: POP
// Say ( MacMillan , DOmarContam-JMM-1 ) ; 6 :
11208: LD_EXP 13
11212: PPUSH
11213: LD_STRING DOmarContam-JMM-1
11215: PPUSH
11216: CALL_OW 88
11220: GO 11246
11222: LD_INT 6
11224: DOUBLE
11225: EQUAL
11226: IFTRUE 11230
11228: GO 11245
11230: POP
// Say ( Burlak , DOmarContam-Bur-1 ) ; end ;
11231: LD_EXP 12
11235: PPUSH
11236: LD_STRING DOmarContam-Bur-1
11238: PPUSH
11239: CALL_OW 88
11243: GO 11246
11245: POP
// Say ( Omar , DOmarContam-Omar-1 ) ;
11246: LD_EXP 51
11250: PPUSH
11251: LD_STRING DOmarContam-Omar-1
11253: PPUSH
11254: CALL_OW 88
// case camp of 4 :
11258: LD_EXP 7
11262: PUSH
11263: LD_INT 4
11265: DOUBLE
11266: EQUAL
11267: IFTRUE 11271
11269: GO 11286
11271: POP
// Say ( MacMillan , DOmarContam-JMM-2 ) ; 6 :
11272: LD_EXP 13
11276: PPUSH
11277: LD_STRING DOmarContam-JMM-2
11279: PPUSH
11280: CALL_OW 88
11284: GO 11310
11286: LD_INT 6
11288: DOUBLE
11289: EQUAL
11290: IFTRUE 11294
11292: GO 11309
11294: POP
// Say ( Burlak , DOmarContam-Bur-2 ) ; end ;
11295: LD_EXP 12
11299: PPUSH
11300: LD_STRING DOmarContam-Bur-2
11302: PPUSH
11303: CALL_OW 88
11307: GO 11310
11309: POP
// interface_hidden := false ;
11310: LD_ADDR_OWVAR 54
11314: PUSH
11315: LD_INT 0
11317: ST_TO_ADDR
// DialogueOff ;
11318: CALL_OW 7
// end ;
11322: LD_VAR 0 1
11326: RET
// on SibDepositContaminated ( sib , x , y ) do var list , un ;
11327: LD_INT 0
11329: PPUSH
11330: PPUSH
// begin list := [ ] ;
11331: LD_ADDR_VAR 0 4
11335: PUSH
11336: EMPTY
11337: ST_TO_ADDR
// for un = 1 to sib_list do
11338: LD_ADDR_VAR 0 5
11342: PUSH
11343: DOUBLE
11344: LD_INT 1
11346: DEC
11347: ST_TO_ADDR
11348: LD_LOC 11
11352: PUSH
11353: FOR_TO
11354: IFFALSE 11456
// if not ( ( sib_list [ ( un * 2 ) - 1 ] = x ) and ( sib_list [ ( un * 2 ) ] = y ) ) then
11356: LD_LOC 11
11360: PUSH
11361: LD_VAR 0 5
11365: PUSH
11366: LD_INT 2
11368: MUL
11369: PUSH
11370: LD_INT 1
11372: MINUS
11373: ARRAY
11374: PUSH
11375: LD_VAR 0 2
11379: EQUAL
11380: PUSH
11381: LD_LOC 11
11385: PUSH
11386: LD_VAR 0 5
11390: PUSH
11391: LD_INT 2
11393: MUL
11394: ARRAY
11395: PUSH
11396: LD_VAR 0 3
11400: EQUAL
11401: AND
11402: NOT
11403: IFFALSE 11454
// list := list ^ [ sib_list [ ( un * 2 ) - 1 ] , sib_list [ ( un * 2 ) ] ] ;
11405: LD_ADDR_VAR 0 4
11409: PUSH
11410: LD_VAR 0 4
11414: PUSH
11415: LD_LOC 11
11419: PUSH
11420: LD_VAR 0 5
11424: PUSH
11425: LD_INT 2
11427: MUL
11428: PUSH
11429: LD_INT 1
11431: MINUS
11432: ARRAY
11433: PUSH
11434: LD_LOC 11
11438: PUSH
11439: LD_VAR 0 5
11443: PUSH
11444: LD_INT 2
11446: MUL
11447: ARRAY
11448: PUSH
11449: EMPTY
11450: LIST
11451: LIST
11452: ADD
11453: ST_TO_ADDR
11454: GO 11353
11456: POP
11457: POP
// sib_list := list ;
11458: LD_ADDR_LOC 11
11462: PUSH
11463: LD_VAR 0 4
11467: ST_TO_ADDR
// end ;
11468: PPOPN 5
11470: END
// function get_sib_list ; var list , un , vysledek ; begin
11471: LD_INT 0
11473: PPUSH
11474: PPUSH
11475: PPUSH
11476: PPUSH
// vysledek := [ ] ;
11477: LD_ADDR_VAR 0 4
11481: PUSH
11482: EMPTY
11483: ST_TO_ADDR
// list := GetListOfResourcesInArea ( ru_base ) ;
11484: LD_ADDR_VAR 0 2
11488: PUSH
11489: LD_INT 12
11491: PPUSH
11492: CALL_OW 442
11496: ST_TO_ADDR
// for un = 1 to ( list div 3 ) do
11497: LD_ADDR_VAR 0 3
11501: PUSH
11502: DOUBLE
11503: LD_INT 1
11505: DEC
11506: ST_TO_ADDR
11507: LD_VAR 0 2
11511: PUSH
11512: LD_INT 3
11514: DIV
11515: PUSH
11516: FOR_TO
11517: IFFALSE 11594
// if list [ ( un * 3 ) ] = source_siberium then
11519: LD_VAR 0 2
11523: PUSH
11524: LD_VAR 0 3
11528: PUSH
11529: LD_INT 3
11531: MUL
11532: ARRAY
11533: PUSH
11534: LD_INT 2
11536: EQUAL
11537: IFFALSE 11592
// vysledek := vysledek ^ [ list [ ( un * 3 ) - 2 ] , list [ ( un * 3 ) - 1 ] ] ;
11539: LD_ADDR_VAR 0 4
11543: PUSH
11544: LD_VAR 0 4
11548: PUSH
11549: LD_VAR 0 2
11553: PUSH
11554: LD_VAR 0 3
11558: PUSH
11559: LD_INT 3
11561: MUL
11562: PUSH
11563: LD_INT 2
11565: MINUS
11566: ARRAY
11567: PUSH
11568: LD_VAR 0 2
11572: PUSH
11573: LD_VAR 0 3
11577: PUSH
11578: LD_INT 3
11580: MUL
11581: PUSH
11582: LD_INT 1
11584: MINUS
11585: ARRAY
11586: PUSH
11587: EMPTY
11588: LIST
11589: LIST
11590: ADD
11591: ST_TO_ADDR
11592: GO 11516
11594: POP
11595: POP
// result := vysledek ;
11596: LD_ADDR_VAR 0 1
11600: PUSH
11601: LD_VAR 0 4
11605: ST_TO_ADDR
// end ;
11606: LD_VAR 0 1
11610: RET
// function get_best_sib ( sib_list ) ; var un , min , x , y , dist , vysledek ; begin
11611: LD_INT 0
11613: PPUSH
11614: PPUSH
11615: PPUSH
11616: PPUSH
11617: PPUSH
11618: PPUSH
11619: PPUSH
// min := [ - 1 , - 1 , - 1 ] ;
11620: LD_ADDR_VAR 0 4
11624: PUSH
11625: LD_INT 1
11627: NEG
11628: PUSH
11629: LD_INT 1
11631: NEG
11632: PUSH
11633: LD_INT 1
11635: NEG
11636: PUSH
11637: EMPTY
11638: LIST
11639: LIST
11640: LIST
11641: ST_TO_ADDR
// for un = 1 to ( sib_list div 2 ) do
11642: LD_ADDR_VAR 0 3
11646: PUSH
11647: DOUBLE
11648: LD_INT 1
11650: DEC
11651: ST_TO_ADDR
11652: LD_VAR 0 1
11656: PUSH
11657: LD_INT 2
11659: DIV
11660: PUSH
11661: FOR_TO
11662: IFFALSE 11807
// begin x := sib_list [ ( un * 2 ) - 1 ] ;
11664: LD_ADDR_VAR 0 5
11668: PUSH
11669: LD_VAR 0 1
11673: PUSH
11674: LD_VAR 0 3
11678: PUSH
11679: LD_INT 2
11681: MUL
11682: PUSH
11683: LD_INT 1
11685: MINUS
11686: ARRAY
11687: ST_TO_ADDR
// y := sib_list [ ( un * 2 ) ] ;
11688: LD_ADDR_VAR 0 6
11692: PUSH
11693: LD_VAR 0 1
11697: PUSH
11698: LD_VAR 0 3
11702: PUSH
11703: LD_INT 2
11705: MUL
11706: ARRAY
11707: ST_TO_ADDR
// dist := GetDistUnitXY ( Omar , x , y ) ;
11708: LD_ADDR_VAR 0 7
11712: PUSH
11713: LD_EXP 51
11717: PPUSH
11718: LD_VAR 0 5
11722: PPUSH
11723: LD_VAR 0 6
11727: PPUSH
11728: CALL_OW 297
11732: ST_TO_ADDR
// if ( ( min [ 3 ] < 0 ) or ( dist < min [ 3 ] ) ) and ( not HexInfo ( x , y ) ) then
11733: LD_VAR 0 4
11737: PUSH
11738: LD_INT 3
11740: ARRAY
11741: PUSH
11742: LD_INT 0
11744: LESS
11745: PUSH
11746: LD_VAR 0 7
11750: PUSH
11751: LD_VAR 0 4
11755: PUSH
11756: LD_INT 3
11758: ARRAY
11759: LESS
11760: OR
11761: PUSH
11762: LD_VAR 0 5
11766: PPUSH
11767: LD_VAR 0 6
11771: PPUSH
11772: CALL_OW 428
11776: NOT
11777: AND
11778: IFFALSE 11805
// min := [ x , y , dist ] ;
11780: LD_ADDR_VAR 0 4
11784: PUSH
11785: LD_VAR 0 5
11789: PUSH
11790: LD_VAR 0 6
11794: PUSH
11795: LD_VAR 0 7
11799: PUSH
11800: EMPTY
11801: LIST
11802: LIST
11803: LIST
11804: ST_TO_ADDR
// end ;
11805: GO 11661
11807: POP
11808: POP
// vysledek := [ min [ 1 ] , min [ 2 ] ] ;
11809: LD_ADDR_VAR 0 8
11813: PUSH
11814: LD_VAR 0 4
11818: PUSH
11819: LD_INT 1
11821: ARRAY
11822: PUSH
11823: LD_VAR 0 4
11827: PUSH
11828: LD_INT 2
11830: ARRAY
11831: PUSH
11832: EMPTY
11833: LIST
11834: LIST
11835: ST_TO_ADDR
// result := vysledek ;
11836: LD_ADDR_VAR 0 2
11840: PUSH
11841: LD_VAR 0 8
11845: ST_TO_ADDR
// end ; end_of_file
11846: LD_VAR 0 2
11850: RET
// on ResearchComplete ( tech , lab ) do begin if tech = tech_SibFiss then
11851: LD_VAR 0 1
11855: PUSH
11856: LD_INT 25
11858: EQUAL
11859: IFFALSE 11900
// case GetSide ( lab ) of 1 :
11861: LD_VAR 0 2
11865: PPUSH
11866: CALL_OW 255
11870: PUSH
11871: LD_INT 1
11873: DOUBLE
11874: EQUAL
11875: IFTRUE 11879
11877: GO 11885
11879: POP
// enable ( 4 ) ; 3 :
11880: LD_INT 4
11882: ENABLE_MARKED
11883: GO 11900
11885: LD_INT 3
11887: DOUBLE
11888: EQUAL
11889: IFTRUE 11893
11891: GO 11899
11893: POP
// enable ( 5 ) ; end ;
11894: LD_INT 5
11896: ENABLE_MARKED
11897: GO 11900
11899: POP
// wait ( 10 ) ;
11900: LD_INT 10
11902: PPUSH
11903: CALL_OW 67
// if not IsBusy ( lab ) then
11907: LD_VAR 0 2
11911: PPUSH
11912: CALL_OW 315
11916: NOT
11917: IFFALSE 11944
// begin labs_in_use := labs_in_use diff lab ;
11919: LD_ADDR_EXP 76
11923: PUSH
11924: LD_EXP 76
11928: PUSH
11929: LD_VAR 0 2
11933: DIFF
11934: ST_TO_ADDR
// Update_Artefact ( lab ) ;
11935: LD_VAR 0 2
11939: PPUSH
11940: CALL 38008 0 1
// end ; end ;
11944: PPOPN 2
11946: END
// on ResearchStarted ( tech , lab ) do var un , side ;
11947: LD_INT 0
11949: PPUSH
11950: PPUSH
// begin labs_in_use := labs_in_use ^ lab ;
11951: LD_ADDR_EXP 76
11955: PUSH
11956: LD_EXP 76
11960: PUSH
11961: LD_VAR 0 2
11965: ADD
11966: ST_TO_ADDR
// side := GetSide ( lab ) ;
11967: LD_ADDR_VAR 0 4
11971: PUSH
11972: LD_VAR 0 2
11976: PPUSH
11977: CALL_OW 255
11981: ST_TO_ADDR
// for un = 0 to ( artefact_number - 1 ) do
11982: LD_ADDR_VAR 0 3
11986: PUSH
11987: DOUBLE
11988: LD_INT 0
11990: DEC
11991: ST_TO_ADDR
11992: LD_EXP 73
11996: PUSH
11997: LD_INT 1
11999: MINUS
12000: PUSH
12001: FOR_TO
12002: IFFALSE 12081
// if lab in [ GetTag ( un * 100 + 11 ) , GetTag ( un * 100 + side * 10 + 15 ) ] then
12004: LD_VAR 0 2
12008: PUSH
12009: LD_VAR 0 3
12013: PUSH
12014: LD_INT 100
12016: MUL
12017: PUSH
12018: LD_INT 11
12020: PLUS
12021: PPUSH
12022: CALL_OW 110
12026: PUSH
12027: LD_VAR 0 3
12031: PUSH
12032: LD_INT 100
12034: MUL
12035: PUSH
12036: LD_VAR 0 4
12040: PUSH
12041: LD_INT 10
12043: MUL
12044: PLUS
12045: PUSH
12046: LD_INT 15
12048: PLUS
12049: PPUSH
12050: CALL_OW 110
12054: PUSH
12055: EMPTY
12056: LIST
12057: LIST
12058: IN
12059: IFFALSE 12079
// DeInit_Lab ( side , un + 1 ) ;
12061: LD_VAR 0 4
12065: PPUSH
12066: LD_VAR 0 3
12070: PUSH
12071: LD_INT 1
12073: PLUS
12074: PPUSH
12075: CALL 37869 0 2
12079: GO 12001
12081: POP
12082: POP
// end ;
12083: PPOPN 4
12085: END
// on ResearchCancel ( tech , lab ) do begin wait ( 10 ) ;
12086: LD_INT 10
12088: PPUSH
12089: CALL_OW 67
// if not IsBusy ( lab ) then
12093: LD_VAR 0 2
12097: PPUSH
12098: CALL_OW 315
12102: NOT
12103: IFFALSE 12130
// begin labs_in_use := labs_in_use diff lab ;
12105: LD_ADDR_EXP 76
12109: PUSH
12110: LD_EXP 76
12114: PUSH
12115: LD_VAR 0 2
12119: DIFF
12120: ST_TO_ADDR
// Update_Artefact ( lab ) ;
12121: LD_VAR 0 2
12125: PPUSH
12126: CALL 38008 0 1
// end ; end ;
12130: PPOPN 2
12132: END
// on UnitDestroyed ( un ) do begin if un = MacMillan then
12133: LD_VAR 0 1
12137: PUSH
12138: LD_EXP 13
12142: EQUAL
12143: IFFALSE 12152
// Mission_failed ( 1 ) ;
12145: LD_INT 1
12147: PPUSH
12148: CALL 13487 0 1
// if un = Burlak then
12152: LD_VAR 0 1
12156: PUSH
12157: LD_EXP 12
12161: EQUAL
12162: IFFALSE 12171
// Mission_failed ( 2 ) ;
12164: LD_INT 2
12166: PPUSH
12167: CALL 13487 0 1
// Update_defend ( un ) ;
12171: LD_VAR 0 1
12175: PPUSH
12176: CALL 19771 0 1
// end ;
12180: PPOPN 1
12182: END
// on UnitGoesToRed ( un ) do begin if ( un = MacMillan ) and not Doctors_available ( MacMillan ) then
12183: LD_VAR 0 1
12187: PUSH
12188: LD_EXP 13
12192: EQUAL
12193: PUSH
12194: LD_EXP 13
12198: PPUSH
12199: CALL 12335 0 1
12203: NOT
12204: AND
12205: IFFALSE 12214
// Mission_failed ( 1 ) ;
12207: LD_INT 1
12209: PPUSH
12210: CALL 13487 0 1
// if ( un = Burlak ) and not Doctors_available ( Burlak ) then
12214: LD_VAR 0 1
12218: PUSH
12219: LD_EXP 12
12223: EQUAL
12224: PUSH
12225: LD_EXP 12
12229: PPUSH
12230: CALL 12335 0 1
12234: NOT
12235: AND
12236: IFFALSE 12245
// Mission_failed ( 2 ) ;
12238: LD_INT 2
12240: PPUSH
12241: CALL 13487 0 1
// if ( GetSide ( un ) = us ) and ( GetControl ( un ) = control_remote ) then
12245: LD_VAR 0 1
12249: PPUSH
12250: CALL_OW 255
12254: PUSH
12255: LD_EXP 3
12259: EQUAL
12260: PUSH
12261: LD_VAR 0 1
12265: PPUSH
12266: CALL_OW 263
12270: PUSH
12271: LD_INT 2
12273: EQUAL
12274: AND
12275: IFFALSE 12293
// begin ComUnlink ( un ) ;
12277: LD_VAR 0 1
12281: PPUSH
12282: CALL_OW 136
// check_remote ( 0 ) ;
12286: LD_INT 0
12288: PPUSH
12289: CALL 33122 0 1
// end ; if GetUnitMc ( un ) then
12293: LD_VAR 0 1
12297: PPUSH
12298: CALL_OW 388
12302: IFFALSE 12323
// RemoveMcUnits ( GetUnitMc ( un ) , un ) ;
12304: LD_VAR 0 1
12308: PPUSH
12309: CALL_OW 388
12313: PPUSH
12314: LD_VAR 0 1
12318: PPUSH
12319: CALL_OW 391
// Update_defend ( un ) ;
12323: LD_VAR 0 1
12327: PPUSH
12328: CALL 19771 0 1
// end ;
12332: PPOPN 1
12334: END
// function Doctors_available ( geroj ) ; var list , un , vysledek ; begin
12335: LD_INT 0
12337: PPUSH
12338: PPUSH
12339: PPUSH
12340: PPUSH
// vysledek := false ;
12341: LD_ADDR_VAR 0 5
12345: PUSH
12346: LD_INT 0
12348: ST_TO_ADDR
// list := FilterAllUnits ( [ [ f_side , you ] , [ f_class , class_scientistic ] ] ) ;
12349: LD_ADDR_VAR 0 3
12353: PUSH
12354: LD_INT 22
12356: PUSH
12357: LD_EXP 1
12361: PUSH
12362: EMPTY
12363: LIST
12364: LIST
12365: PUSH
12366: LD_INT 25
12368: PUSH
12369: LD_INT 4
12371: PUSH
12372: EMPTY
12373: LIST
12374: LIST
12375: PUSH
12376: EMPTY
12377: LIST
12378: LIST
12379: PPUSH
12380: CALL_OW 69
12384: ST_TO_ADDR
// if list then
12385: LD_VAR 0 3
12389: IFFALSE 12399
// vysledek := true ;
12391: LD_ADDR_VAR 0 5
12395: PUSH
12396: LD_INT 1
12398: ST_TO_ADDR
// if ( not vysledek ) and ( IsInArea ( geroj , ar_crates ) ) and ( FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] ] ) ) and ( FilterAllUnits ( [ [ f_side , you ] , [ f_btype , b_lab ] ] ) ) then
12399: LD_VAR 0 5
12403: NOT
12404: PUSH
12405: LD_VAR 0 1
12409: PPUSH
12410: LD_INT 3
12412: PPUSH
12413: CALL_OW 308
12417: AND
12418: PUSH
12419: LD_INT 22
12421: PUSH
12422: LD_EXP 1
12426: PUSH
12427: EMPTY
12428: LIST
12429: LIST
12430: PUSH
12431: LD_INT 21
12433: PUSH
12434: LD_INT 1
12436: PUSH
12437: EMPTY
12438: LIST
12439: LIST
12440: PUSH
12441: EMPTY
12442: LIST
12443: LIST
12444: PPUSH
12445: CALL_OW 69
12449: AND
12450: PUSH
12451: LD_INT 22
12453: PUSH
12454: LD_EXP 1
12458: PUSH
12459: EMPTY
12460: LIST
12461: LIST
12462: PUSH
12463: LD_INT 30
12465: PUSH
12466: LD_INT 6
12468: PUSH
12469: EMPTY
12470: LIST
12471: LIST
12472: PUSH
12473: EMPTY
12474: LIST
12475: LIST
12476: PPUSH
12477: CALL_OW 69
12481: AND
12482: IFFALSE 12492
// vysledek := true ;
12484: LD_ADDR_VAR 0 5
12488: PUSH
12489: LD_INT 1
12491: ST_TO_ADDR
// result := vysledek ;
12492: LD_ADDR_VAR 0 2
12496: PUSH
12497: LD_VAR 0 5
12501: ST_TO_ADDR
// end ;
12502: LD_VAR 0 2
12506: RET
// on Contact ( side1 , side2 ) do begin if ( side1 in [ ar_al , you ] ) and ( side2 in [ ar_al , you ] ) then
12507: LD_VAR 0 1
12511: PUSH
12512: LD_EXP 5
12516: PUSH
12517: LD_EXP 1
12521: PUSH
12522: EMPTY
12523: LIST
12524: LIST
12525: IN
12526: PUSH
12527: LD_VAR 0 2
12531: PUSH
12532: LD_EXP 5
12536: PUSH
12537: LD_EXP 1
12541: PUSH
12542: EMPTY
12543: LIST
12544: LIST
12545: IN
12546: AND
12547: IFFALSE 12557
// omar_in_contact := true ;
12549: LD_ADDR_EXP 62
12553: PUSH
12554: LD_INT 1
12556: ST_TO_ADDR
// end ;
12557: PPOPN 2
12559: END
// on DestinationUnreachable ( un ) do begin ComStop ( un ) ;
12560: LD_VAR 0 1
12564: PPUSH
12565: CALL_OW 141
// if ( GetType ( un ) = unit_vehicle ) and ( GetWeapon ( un ) in [ us_cargo_bay , ru_cargo_bay , ar_cargo_bay ] ) then
12569: LD_VAR 0 1
12573: PPUSH
12574: CALL_OW 247
12578: PUSH
12579: LD_INT 2
12581: EQUAL
12582: PUSH
12583: LD_VAR 0 1
12587: PPUSH
12588: CALL_OW 264
12592: PUSH
12593: LD_INT 12
12595: PUSH
12596: LD_INT 51
12598: PUSH
12599: LD_INT 32
12601: PUSH
12602: EMPTY
12603: LIST
12604: LIST
12605: LIST
12606: IN
12607: AND
12608: IFFALSE 12624
// remove_bad_crates ( GetSide ( un ) ) ;
12610: LD_VAR 0 1
12614: PPUSH
12615: CALL_OW 255
12619: PPUSH
12620: CALL 32429 0 1
// end ;
12624: PPOPN 1
12626: END
// on VehicleConstructed ( veh , fac ) do var side , list , tower ;
12627: LD_INT 0
12629: PPUSH
12630: PPUSH
12631: PPUSH
// begin side := GetSide ( fac ) ;
12632: LD_ADDR_VAR 0 3
12636: PUSH
12637: LD_VAR 0 2
12641: PPUSH
12642: CALL_OW 255
12646: ST_TO_ADDR
// case side of 1 :
12647: LD_VAR 0 3
12651: PUSH
12652: LD_INT 1
12654: DOUBLE
12655: EQUAL
12656: IFTRUE 12660
12658: GO 12806
12660: POP
// begin check_remote ( veh ) ;
12661: LD_VAR 0 1
12665: PPUSH
12666: CALL 33122 0 1
// list := ready_forces [ side ] ^ veh ;
12670: LD_ADDR_VAR 0 4
12674: PUSH
12675: LD_EXP 63
12679: PUSH
12680: LD_VAR 0 3
12684: ARRAY
12685: PUSH
12686: LD_VAR 0 1
12690: ADD
12691: ST_TO_ADDR
// ready_forces := Delete ( ready_forces , side ) ;
12692: LD_ADDR_EXP 63
12696: PUSH
12697: LD_EXP 63
12701: PPUSH
12702: LD_VAR 0 3
12706: PPUSH
12707: CALL_OW 3
12711: ST_TO_ADDR
// ready_forces := Insert ( ready_forces , side , list ) ;
12712: LD_ADDR_EXP 63
12716: PUSH
12717: LD_EXP 63
12721: PPUSH
12722: LD_VAR 0 3
12726: PPUSH
12727: LD_VAR 0 4
12731: PPUSH
12732: CALL_OW 2
12736: ST_TO_ADDR
// tower := FilterAllUnits ( [ [ f_side , side ] , [ f_btype , b_control_tower ] ] ) ;
12737: LD_ADDR_VAR 0 5
12741: PUSH
12742: LD_INT 22
12744: PUSH
12745: LD_VAR 0 3
12749: PUSH
12750: EMPTY
12751: LIST
12752: LIST
12753: PUSH
12754: LD_INT 30
12756: PUSH
12757: LD_INT 36
12759: PUSH
12760: EMPTY
12761: LIST
12762: LIST
12763: PUSH
12764: EMPTY
12765: LIST
12766: LIST
12767: PPUSH
12768: CALL_OW 69
12772: ST_TO_ADDR
// AddComMoveToArea ( veh , us_parking ) ;
12773: LD_VAR 0 1
12777: PPUSH
12778: LD_INT 22
12780: PPUSH
12781: CALL_OW 173
// if GetWeapon ( veh ) = us_siberium_rocket then
12785: LD_VAR 0 1
12789: PPUSH
12790: CALL_OW 264
12794: PUSH
12795: LD_INT 8
12797: EQUAL
12798: IFFALSE 12804
// US_Wins ;
12800: CALL 12949 0 0
// end ; 2 :
12804: GO 12946
12806: LD_INT 2
12808: DOUBLE
12809: EQUAL
12810: IFTRUE 12814
12812: GO 12829
12814: POP
// ComMoveToArea ( veh , ar_parking ) ; 3 :
12815: LD_VAR 0 1
12819: PPUSH
12820: LD_INT 23
12822: PPUSH
12823: CALL_OW 113
12827: GO 12946
12829: LD_INT 3
12831: DOUBLE
12832: EQUAL
12833: IFTRUE 12837
12835: GO 12945
12837: POP
// begin if GetWeapon ( veh ) = ru_siberium_rocket then
12838: LD_VAR 0 1
12842: PPUSH
12843: CALL_OW 264
12847: PUSH
12848: LD_INT 48
12850: EQUAL
12851: IFFALSE 12864
// send_sib_to_US ( veh ) else
12853: LD_VAR 0 1
12857: PPUSH
12858: CALL 34538 0 1
12862: GO 12943
// begin list := ready_forces [ side ] ^ veh ;
12864: LD_ADDR_VAR 0 4
12868: PUSH
12869: LD_EXP 63
12873: PUSH
12874: LD_VAR 0 3
12878: ARRAY
12879: PUSH
12880: LD_VAR 0 1
12884: ADD
12885: ST_TO_ADDR
// ready_forces := Delete ( ready_forces , side ) ;
12886: LD_ADDR_EXP 63
12890: PUSH
12891: LD_EXP 63
12895: PPUSH
12896: LD_VAR 0 3
12900: PPUSH
12901: CALL_OW 3
12905: ST_TO_ADDR
// ready_forces := Insert ( ready_forces , side , list ) ;
12906: LD_ADDR_EXP 63
12910: PUSH
12911: LD_EXP 63
12915: PPUSH
12916: LD_VAR 0 3
12920: PPUSH
12921: LD_VAR 0 4
12925: PPUSH
12926: CALL_OW 2
12930: ST_TO_ADDR
// ComMoveToArea ( veh , ru_parking ) ;
12931: LD_VAR 0 1
12935: PPUSH
12936: LD_INT 21
12938: PPUSH
12939: CALL_OW 113
// end ; end ; end ;
12943: GO 12946
12945: POP
// end ; end_of_file
12946: PPOPN 5
12948: END
// export function US_Wins ; begin
12949: LD_INT 0
12951: PPUSH
// CenterOnUnits ( [ Burlak , MacMillan ] ) ;
12952: LD_EXP 12
12956: PUSH
12957: LD_EXP 13
12961: PUSH
12962: EMPTY
12963: LIST
12964: LIST
12965: PPUSH
12966: CALL_OW 85
// wait ( 0 0$1 ) ;
12970: LD_INT 35
12972: PPUSH
12973: CALL_OW 67
// DialogueOn ;
12977: CALL_OW 6
// interface_hidden := true ;
12981: LD_ADDR_OWVAR 54
12985: PUSH
12986: LD_INT 1
12988: ST_TO_ADDR
// Say ( Powell , DWinAmericans-Pow-1 ) ;
12989: LD_EXP 54
12993: PPUSH
12994: LD_STRING DWinAmericans-Pow-1
12996: PPUSH
12997: CALL_OW 88
// case camp of 4 :
13001: LD_EXP 7
13005: PUSH
13006: LD_INT 4
13008: DOUBLE
13009: EQUAL
13010: IFTRUE 13014
13012: GO 13054
13014: POP
// if IsOK ( MacMillan ) then
13015: LD_EXP 13
13019: PPUSH
13020: CALL_OW 302
13024: IFFALSE 13040
// Say ( MacMillan , DWinAmericans-JMM-1 ) else
13026: LD_EXP 13
13030: PPUSH
13031: LD_STRING DWinAmericans-JMM-1
13033: PPUSH
13034: CALL_OW 88
13038: GO 13052
// Say ( Burlak , DWinAmericans-Bur-1 ) ; 6 :
13040: LD_EXP 12
13044: PPUSH
13045: LD_STRING DWinAmericans-Bur-1
13047: PPUSH
13048: CALL_OW 88
13052: GO 13103
13054: LD_INT 6
13056: DOUBLE
13057: EQUAL
13058: IFTRUE 13062
13060: GO 13102
13062: POP
// if IsOK ( Burlak ) then
13063: LD_EXP 12
13067: PPUSH
13068: CALL_OW 302
13072: IFFALSE 13088
// Say ( Burlak , DWinAmericans-Bur-1 ) else
13074: LD_EXP 12
13078: PPUSH
13079: LD_STRING DWinAmericans-Bur-1
13081: PPUSH
13082: CALL_OW 88
13086: GO 13100
// Say ( MacMillan , DWinAmericans-JMM-1 ) ; end ;
13088: LD_EXP 13
13092: PPUSH
13093: LD_STRING DWinAmericans-JMM-1
13095: PPUSH
13096: CALL_OW 88
13100: GO 13103
13102: POP
// interface_hidden := false ;
13103: LD_ADDR_OWVAR 54
13107: PUSH
13108: LD_INT 0
13110: ST_TO_ADDR
// DialogueOff ;
13111: CALL_OW 7
// Mission_failed ( 3 ) ;
13115: LD_INT 3
13117: PPUSH
13118: CALL 13487 0 1
// end ;
13122: LD_VAR 0 1
13126: RET
// on SiberiteRocketExploded ( un , x , y ) do begin wait ( 0 0$7 ) ;
13127: LD_INT 245
13129: PPUSH
13130: CALL_OW 67
// if camp = 6 then
13134: LD_EXP 7
13138: PUSH
13139: LD_INT 6
13141: EQUAL
13142: IFFALSE 13155
// CenterOnUnits ( Burlak ) else
13144: LD_EXP 12
13148: PPUSH
13149: CALL_OW 85
13153: GO 13164
// CenterOnUnits ( MacMillan ) ;
13155: LD_EXP 13
13159: PPUSH
13160: CALL_OW 85
// DialogueOn ;
13164: CALL_OW 6
// interface_hidden := true ;
13168: LD_ADDR_OWVAR 54
13172: PUSH
13173: LD_INT 1
13175: ST_TO_ADDR
// SayRadio ( Platonov , DWinRussians-Pla-1 ) ;
13176: LD_EXP 55
13180: PPUSH
13181: LD_STRING DWinRussians-Pla-1
13183: PPUSH
13184: CALL_OW 94
// case camp of 4 :
13188: LD_EXP 7
13192: PUSH
13193: LD_INT 4
13195: DOUBLE
13196: EQUAL
13197: IFTRUE 13201
13199: GO 13241
13201: POP
// if IsOK ( MacMillan ) then
13202: LD_EXP 13
13206: PPUSH
13207: CALL_OW 302
13211: IFFALSE 13227
// Say ( MacMillan , DWinRussians-JMM-1 ) else
13213: LD_EXP 13
13217: PPUSH
13218: LD_STRING DWinRussians-JMM-1
13220: PPUSH
13221: CALL_OW 88
13225: GO 13239
// Say ( Burlak , DWinRussians-Bur-1 ) ; 6 :
13227: LD_EXP 12
13231: PPUSH
13232: LD_STRING DWinRussians-Bur-1
13234: PPUSH
13235: CALL_OW 88
13239: GO 13290
13241: LD_INT 6
13243: DOUBLE
13244: EQUAL
13245: IFTRUE 13249
13247: GO 13289
13249: POP
// if IsOK ( Burlak ) then
13250: LD_EXP 12
13254: PPUSH
13255: CALL_OW 302
13259: IFFALSE 13275
// Say ( Burlak , DWinRussians-Bur-1 ) else
13261: LD_EXP 12
13265: PPUSH
13266: LD_STRING DWinRussians-Bur-1
13268: PPUSH
13269: CALL_OW 88
13273: GO 13287
// Say ( MacMillan , DWinRussians-JMM-1 ) ; end ;
13275: LD_EXP 13
13279: PPUSH
13280: LD_STRING DWinRussians-JMM-1
13282: PPUSH
13283: CALL_OW 88
13287: GO 13290
13289: POP
// interface_hidden := false ;
13290: LD_ADDR_OWVAR 54
13294: PUSH
13295: LD_INT 0
13297: ST_TO_ADDR
// DialogueOff ;
13298: CALL_OW 7
// Mission_failed ( 4 ) ;
13302: LD_INT 4
13304: PPUSH
13305: CALL 13487 0 1
// end ; end_of_file
13309: PPOPN 3
13311: END
// every 0 0$1 trigger finalize = 2 do
13312: LD_EXP 57
13316: PUSH
13317: LD_INT 2
13319: EQUAL
13320: IFFALSE 13329
13322: GO 13324
13324: DISABLE
// begin Konec_Mise ;
13325: CALL 13330 0 0
// end ;
13329: END
// export function Konec_Mise ; var campaign_loading , campaign_lost , another_campaign ; begin
13330: LD_INT 0
13332: PPUSH
13333: PPUSH
13334: PPUSH
13335: PPUSH
// lets_talking ;
13336: CALL 15420 0 0
// another_campaign := true ;
13340: LD_ADDR_VAR 0 4
13344: PUSH
13345: LD_INT 1
13347: ST_TO_ADDR
// gained_medals := [ ] ;
13348: LD_ADDR_OWVAR 61
13352: PUSH
13353: EMPTY
13354: ST_TO_ADDR
// missing_medals := [ ] ;
13355: LD_ADDR_OWVAR 62
13359: PUSH
13360: EMPTY
13361: ST_TO_ADDR
// AddMedal ( Hero , another_campaign ) ;
13362: LD_STRING Hero
13364: PPUSH
13365: LD_VAR 0 4
13369: PPUSH
13370: CALL_OW 101
// AddMedal ( Artefact , GetTag ( 81 ) and GetTag ( 181 ) and GetTag ( 281 ) ) ;
13374: LD_STRING Artefact
13376: PPUSH
13377: LD_INT 81
13379: PPUSH
13380: CALL_OW 110
13384: PUSH
13385: LD_INT 181
13387: PPUSH
13388: CALL_OW 110
13392: AND
13393: PUSH
13394: LD_INT 281
13396: PPUSH
13397: CALL_OW 110
13401: AND
13402: PPUSH
13403: CALL_OW 101
// case camp of 4 :
13407: LD_EXP 7
13411: PUSH
13412: LD_INT 4
13414: DOUBLE
13415: EQUAL
13416: IFTRUE 13420
13418: GO 13440
13420: POP
// AddMedal ( ReconcileBurlak , IsOK ( Burlak ) ) ; 6 :
13421: LD_STRING ReconcileBurlak
13423: PPUSH
13424: LD_EXP 12
13428: PPUSH
13429: CALL_OW 302
13433: PPUSH
13434: CALL_OW 101
13438: GO 13469
13440: LD_INT 6
13442: DOUBLE
13443: EQUAL
13444: IFTRUE 13448
13446: GO 13468
13448: POP
// AddMedal ( ReconcileJMM , IsOK ( MacMillan ) ) ; end ;
13449: LD_STRING ReconcileJMM
13451: PPUSH
13452: LD_EXP 13
13456: PPUSH
13457: CALL_OW 302
13461: PPUSH
13462: CALL_OW 101
13466: GO 13469
13468: POP
// GiveMedals ( Main ) ;
13469: LD_STRING Main
13471: PPUSH
13472: CALL_OW 102
// YouWin ;
13476: CALL_OW 103
// exit ;
13480: GO 13482
// end ;
13482: LD_VAR 0 1
13486: RET
// export function Mission_Failed ( how ) ; begin
13487: LD_INT 0
13489: PPUSH
// case how of 1 :
13490: LD_VAR 0 1
13494: PUSH
13495: LD_INT 1
13497: DOUBLE
13498: EQUAL
13499: IFTRUE 13503
13501: GO 13513
13503: POP
// YouLost ( JMM ) ; 2 :
13504: LD_STRING JMM
13506: PPUSH
13507: CALL_OW 104
13511: GO 13568
13513: LD_INT 2
13515: DOUBLE
13516: EQUAL
13517: IFTRUE 13521
13519: GO 13531
13521: POP
// YouLost ( Burlak ) ; 3 :
13522: LD_STRING Burlak
13524: PPUSH
13525: CALL_OW 104
13529: GO 13568
13531: LD_INT 3
13533: DOUBLE
13534: EQUAL
13535: IFTRUE 13539
13537: GO 13549
13539: POP
// YouLost ( AmBomb ) ; 4 :
13540: LD_STRING AmBomb
13542: PPUSH
13543: CALL_OW 104
13547: GO 13568
13549: LD_INT 4
13551: DOUBLE
13552: EQUAL
13553: IFTRUE 13557
13555: GO 13567
13557: POP
// YouLost ( RuBomb ) ; end ;
13558: LD_STRING RuBomb
13560: PPUSH
13561: CALL_OW 104
13565: GO 13568
13567: POP
// end ; end_of_file
13568: LD_VAR 0 2
13572: RET
// function Base_Destroyed ( side ) ; var un , list , vysledek ; begin
13573: LD_INT 0
13575: PPUSH
13576: PPUSH
13577: PPUSH
13578: PPUSH
// vysledek := false ;
13579: LD_ADDR_VAR 0 5
13583: PUSH
13584: LD_INT 0
13586: ST_TO_ADDR
// if not ( FilterAllUnits ( [ [ f_side , side ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] , [ f_ok ] ] ) or FilterAllUnits ( [ [ f_side , side ] , [ f_class , class_engineer ] , [ f_ok ] ] ) ) then
13587: LD_INT 22
13589: PUSH
13590: LD_VAR 0 1
13594: PUSH
13595: EMPTY
13596: LIST
13597: LIST
13598: PUSH
13599: LD_INT 2
13601: PUSH
13602: LD_INT 30
13604: PUSH
13605: LD_INT 0
13607: PUSH
13608: EMPTY
13609: LIST
13610: LIST
13611: PUSH
13612: LD_INT 30
13614: PUSH
13615: LD_INT 1
13617: PUSH
13618: EMPTY
13619: LIST
13620: LIST
13621: PUSH
13622: EMPTY
13623: LIST
13624: LIST
13625: LIST
13626: PUSH
13627: LD_INT 50
13629: PUSH
13630: EMPTY
13631: LIST
13632: PUSH
13633: EMPTY
13634: LIST
13635: LIST
13636: LIST
13637: PPUSH
13638: CALL_OW 69
13642: PUSH
13643: LD_INT 22
13645: PUSH
13646: LD_VAR 0 1
13650: PUSH
13651: EMPTY
13652: LIST
13653: LIST
13654: PUSH
13655: LD_INT 25
13657: PUSH
13658: LD_INT 2
13660: PUSH
13661: EMPTY
13662: LIST
13663: LIST
13664: PUSH
13665: LD_INT 50
13667: PUSH
13668: EMPTY
13669: LIST
13670: PUSH
13671: EMPTY
13672: LIST
13673: LIST
13674: LIST
13675: PPUSH
13676: CALL_OW 69
13680: OR
13681: NOT
13682: IFFALSE 13692
// vysledek := true ;
13684: LD_ADDR_VAR 0 5
13688: PUSH
13689: LD_INT 1
13691: ST_TO_ADDR
// if not vysledek then
13692: LD_VAR 0 5
13696: NOT
13697: IFFALSE 13760
// begin list := FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_human ] , [ f_ok ] ] ) ;
13699: LD_ADDR_VAR 0 4
13703: PUSH
13704: LD_INT 22
13706: PUSH
13707: LD_VAR 0 1
13711: PUSH
13712: EMPTY
13713: LIST
13714: LIST
13715: PUSH
13716: LD_INT 21
13718: PUSH
13719: LD_INT 1
13721: PUSH
13722: EMPTY
13723: LIST
13724: LIST
13725: PUSH
13726: LD_INT 50
13728: PUSH
13729: EMPTY
13730: LIST
13731: PUSH
13732: EMPTY
13733: LIST
13734: LIST
13735: LIST
13736: PPUSH
13737: CALL_OW 69
13741: ST_TO_ADDR
// if list < 3 then
13742: LD_VAR 0 4
13746: PUSH
13747: LD_INT 3
13749: LESS
13750: IFFALSE 13760
// vysledek := true ;
13752: LD_ADDR_VAR 0 5
13756: PUSH
13757: LD_INT 1
13759: ST_TO_ADDR
// end ; if not vysledek then
13760: LD_VAR 0 5
13764: NOT
13765: IFFALSE 13895
// begin list := FilterAllUnits ( [ [ f_side , side ] , [ f_or , [ f_btype , b_bunker ] , [ f_btype , b_turret ] ] , [ f_ok ] ] ) ;
13767: LD_ADDR_VAR 0 4
13771: PUSH
13772: LD_INT 22
13774: PUSH
13775: LD_VAR 0 1
13779: PUSH
13780: EMPTY
13781: LIST
13782: LIST
13783: PUSH
13784: LD_INT 2
13786: PUSH
13787: LD_INT 30
13789: PUSH
13790: LD_INT 32
13792: PUSH
13793: EMPTY
13794: LIST
13795: LIST
13796: PUSH
13797: LD_INT 30
13799: PUSH
13800: LD_INT 33
13802: PUSH
13803: EMPTY
13804: LIST
13805: LIST
13806: PUSH
13807: EMPTY
13808: LIST
13809: LIST
13810: LIST
13811: PUSH
13812: LD_INT 50
13814: PUSH
13815: EMPTY
13816: LIST
13817: PUSH
13818: EMPTY
13819: LIST
13820: LIST
13821: LIST
13822: PPUSH
13823: CALL_OW 69
13827: ST_TO_ADDR
// un := FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_vehicle ] , [ f_ok ] ] ) ;
13828: LD_ADDR_VAR 0 3
13832: PUSH
13833: LD_INT 22
13835: PUSH
13836: LD_VAR 0 1
13840: PUSH
13841: EMPTY
13842: LIST
13843: LIST
13844: PUSH
13845: LD_INT 21
13847: PUSH
13848: LD_INT 2
13850: PUSH
13851: EMPTY
13852: LIST
13853: LIST
13854: PUSH
13855: LD_INT 50
13857: PUSH
13858: EMPTY
13859: LIST
13860: PUSH
13861: EMPTY
13862: LIST
13863: LIST
13864: LIST
13865: PPUSH
13866: CALL_OW 69
13870: ST_TO_ADDR
// if ( un + list ) < 5 then
13871: LD_VAR 0 3
13875: PUSH
13876: LD_VAR 0 4
13880: PLUS
13881: PUSH
13882: LD_INT 5
13884: LESS
13885: IFFALSE 13895
// vysledek := true ;
13887: LD_ADDR_VAR 0 5
13891: PUSH
13892: LD_INT 1
13894: ST_TO_ADDR
// end ; if not vysledek then
13895: LD_VAR 0 5
13899: NOT
13900: IFFALSE 13989
// begin list := FilterAllUnits ( [ [ f_side , side ] , [ f_or , [ f_btype , b_solar_power ] , [ f_btype , b_oil_power ] , [ f_btype , b_siberite_power ] ] , [ f_ok ] ] ) ;
13902: LD_ADDR_VAR 0 4
13906: PUSH
13907: LD_INT 22
13909: PUSH
13910: LD_VAR 0 1
13914: PUSH
13915: EMPTY
13916: LIST
13917: LIST
13918: PUSH
13919: LD_INT 2
13921: PUSH
13922: LD_INT 30
13924: PUSH
13925: LD_INT 27
13927: PUSH
13928: EMPTY
13929: LIST
13930: LIST
13931: PUSH
13932: LD_INT 30
13934: PUSH
13935: LD_INT 26
13937: PUSH
13938: EMPTY
13939: LIST
13940: LIST
13941: PUSH
13942: LD_INT 30
13944: PUSH
13945: LD_INT 28
13947: PUSH
13948: EMPTY
13949: LIST
13950: LIST
13951: PUSH
13952: EMPTY
13953: LIST
13954: LIST
13955: LIST
13956: LIST
13957: PUSH
13958: LD_INT 50
13960: PUSH
13961: EMPTY
13962: LIST
13963: PUSH
13964: EMPTY
13965: LIST
13966: LIST
13967: LIST
13968: PPUSH
13969: CALL_OW 69
13973: ST_TO_ADDR
// if not list then
13974: LD_VAR 0 4
13978: NOT
13979: IFFALSE 13989
// vysledek := 0 ;
13981: LD_ADDR_VAR 0 5
13985: PUSH
13986: LD_INT 0
13988: ST_TO_ADDR
// end ; result := vysledek ;
13989: LD_ADDR_VAR 0 2
13993: PUSH
13994: LD_VAR 0 5
13998: ST_TO_ADDR
// end ;
13999: LD_VAR 0 2
14003: RET
// every 0 0$2.1 trigger Base_Destroyed ( us ) do var sol , un , list ;
14004: LD_EXP 3
14008: PPUSH
14009: CALL 13573 0 1
14013: IFFALSE 14553
14015: GO 14017
14017: DISABLE
14018: LD_INT 0
14020: PPUSH
14021: PPUSH
14022: PPUSH
// begin if IsOK ( Powell ) then
14023: LD_EXP 54
14027: PPUSH
14028: CALL_OW 302
14032: IFFALSE 14110
// begin CenterOnUnits ( Powell ) ;
14034: LD_EXP 54
14038: PPUSH
14039: CALL_OW 85
// DialogueOn ;
14043: CALL_OW 6
// interface_hidden := true ;
14047: LD_ADDR_OWVAR 54
14051: PUSH
14052: LD_INT 1
14054: ST_TO_ADDR
// Say ( Powell , DSurrenderAmericans-Pow-1 ) ;
14055: LD_EXP 54
14059: PPUSH
14060: LD_STRING DSurrenderAmericans-Pow-1
14062: PPUSH
14063: CALL_OW 88
// Say ( MacMillan , DSurrenderAmericans-JMM-1 ) ;
14067: LD_EXP 13
14071: PPUSH
14072: LD_STRING DSurrenderAmericans-JMM-1
14074: PPUSH
14075: CALL_OW 88
// interface_hidden := false ;
14079: LD_ADDR_OWVAR 54
14083: PUSH
14084: LD_INT 0
14086: ST_TO_ADDR
// DialogueOff ;
14087: CALL_OW 7
// repeat wait ( 0 0$1 ) ;
14091: LD_INT 35
14093: PPUSH
14094: CALL_OW 67
// until not IsOK ( Powell ) ;
14098: LD_EXP 54
14102: PPUSH
14103: CALL_OW 302
14107: NOT
14108: IFFALSE 14091
// end ; cpu_list := cpu_list diff us ;
14110: LD_ADDR_EXP 8
14114: PUSH
14115: LD_EXP 8
14119: PUSH
14120: LD_EXP 3
14124: DIFF
14125: ST_TO_ADDR
// SetAttitude ( you , us , att_friend , true ) ;
14126: LD_EXP 1
14130: PPUSH
14131: LD_EXP 3
14135: PPUSH
14136: LD_INT 1
14138: PPUSH
14139: LD_INT 1
14141: PPUSH
14142: CALL_OW 80
// sol := FindLastMohycane ( us ) ;
14146: LD_ADDR_VAR 0 1
14150: PUSH
14151: LD_EXP 3
14155: PPUSH
14156: CALL 15108 0 1
14160: ST_TO_ADDR
// if IsOK ( sol ) then
14161: LD_VAR 0 1
14165: PPUSH
14166: CALL_OW 302
14170: IFFALSE 14181
// ComExitBuilding ( sol ) ;
14172: LD_VAR 0 1
14176: PPUSH
14177: CALL_OW 122
// repeat un := FilterAllUnits ( [ [ f_side , you ] , [ f_ok ] ] ) ;
14181: LD_ADDR_VAR 0 2
14185: PUSH
14186: LD_INT 22
14188: PUSH
14189: LD_EXP 1
14193: PUSH
14194: EMPTY
14195: LIST
14196: LIST
14197: PUSH
14198: LD_INT 50
14200: PUSH
14201: EMPTY
14202: LIST
14203: PUSH
14204: EMPTY
14205: LIST
14206: LIST
14207: PPUSH
14208: CALL_OW 69
14212: ST_TO_ADDR
// ComMoveUnit ( sol , NearestUnitToUnit ( un , sol ) ) ;
14213: LD_VAR 0 1
14217: PPUSH
14218: LD_VAR 0 2
14222: PPUSH
14223: LD_VAR 0 1
14227: PPUSH
14228: CALL_OW 74
14232: PPUSH
14233: CALL_OW 112
// wait ( 0 0$1 ) ;
14237: LD_INT 35
14239: PPUSH
14240: CALL_OW 67
// until See ( you , sol ) ;
14244: LD_EXP 1
14248: PPUSH
14249: LD_VAR 0 1
14253: PPUSH
14254: CALL_OW 292
14258: IFFALSE 14181
// CenterOnUnits ( sol ) ;
14260: LD_VAR 0 1
14264: PPUSH
14265: CALL_OW 85
// DialogueOn ;
14269: CALL_OW 6
// interface_hidden := true ;
14273: LD_ADDR_OWVAR 54
14277: PUSH
14278: LD_INT 1
14280: ST_TO_ADDR
// case camp of 4 :
14281: LD_EXP 7
14285: PUSH
14286: LD_INT 4
14288: DOUBLE
14289: EQUAL
14290: IFTRUE 14294
14292: GO 14309
14294: POP
// Say ( sol , DSurrenderAmericans-Sol1-1a ) ; 6 :
14295: LD_VAR 0 1
14299: PPUSH
14300: LD_STRING DSurrenderAmericans-Sol1-1a
14302: PPUSH
14303: CALL_OW 88
14307: GO 14333
14309: LD_INT 6
14311: DOUBLE
14312: EQUAL
14313: IFTRUE 14317
14315: GO 14332
14317: POP
// Say ( sol , DSurrenderAmericans-Sol1-1 ) ; end ;
14318: LD_VAR 0 1
14322: PPUSH
14323: LD_STRING DSurrenderAmericans-Sol1-1
14325: PPUSH
14326: CALL_OW 88
14330: GO 14333
14332: POP
// interface_hidden := false ;
14333: LD_ADDR_OWVAR 54
14337: PUSH
14338: LD_INT 0
14340: ST_TO_ADDR
// DialogueOff ;
14341: CALL_OW 7
// finalize := finalize + 1 ;
14345: LD_ADDR_EXP 57
14349: PUSH
14350: LD_EXP 57
14354: PUSH
14355: LD_INT 1
14357: PLUS
14358: ST_TO_ADDR
// list := FilterAllUnits ( [ [ f_side , us ] , f_not , [ f_type , unit_human ] ] ) ;
14359: LD_ADDR_VAR 0 3
14363: PUSH
14364: LD_INT 22
14366: PUSH
14367: LD_EXP 3
14371: PUSH
14372: EMPTY
14373: LIST
14374: LIST
14375: PUSH
14376: LD_INT 3
14378: PUSH
14379: LD_INT 21
14381: PUSH
14382: LD_INT 1
14384: PUSH
14385: EMPTY
14386: LIST
14387: LIST
14388: PUSH
14389: EMPTY
14390: LIST
14391: LIST
14392: LIST
14393: PPUSH
14394: CALL_OW 69
14398: ST_TO_ADDR
// SetSide ( list , you ) ;
14399: LD_VAR 0 3
14403: PPUSH
14404: LD_EXP 1
14408: PPUSH
14409: CALL_OW 235
// repeat list := FilterAllUnits ( [ [ f_side , us ] , [ f_type , unit_human ] , [ f_ok ] ] ) ;
14413: LD_ADDR_VAR 0 3
14417: PUSH
14418: LD_INT 22
14420: PUSH
14421: LD_EXP 3
14425: PUSH
14426: EMPTY
14427: LIST
14428: LIST
14429: PUSH
14430: LD_INT 21
14432: PUSH
14433: LD_INT 1
14435: PUSH
14436: EMPTY
14437: LIST
14438: LIST
14439: PUSH
14440: LD_INT 50
14442: PUSH
14443: EMPTY
14444: LIST
14445: PUSH
14446: EMPTY
14447: LIST
14448: LIST
14449: LIST
14450: PPUSH
14451: CALL_OW 69
14455: ST_TO_ADDR
// ComMoveToArea ( list , am_leaving_area ) ;
14456: LD_VAR 0 3
14460: PPUSH
14461: LD_INT 30
14463: PPUSH
14464: CALL_OW 113
// if list then
14468: LD_VAR 0 3
14472: IFFALSE 14481
// wait ( 0 0$2 ) ;
14474: LD_INT 70
14476: PPUSH
14477: CALL_OW 67
// sol := FilterUnitsInArea ( am_leaving_area , [ [ f_side , us ] , [ f_type , unit_human ] ] ) ;
14481: LD_ADDR_VAR 0 1
14485: PUSH
14486: LD_INT 30
14488: PPUSH
14489: LD_INT 22
14491: PUSH
14492: LD_EXP 3
14496: PUSH
14497: EMPTY
14498: LIST
14499: LIST
14500: PUSH
14501: LD_INT 21
14503: PUSH
14504: LD_INT 1
14506: PUSH
14507: EMPTY
14508: LIST
14509: LIST
14510: PUSH
14511: EMPTY
14512: LIST
14513: LIST
14514: PPUSH
14515: CALL_OW 70
14519: ST_TO_ADDR
// for un in sol do
14520: LD_ADDR_VAR 0 2
14524: PUSH
14525: LD_VAR 0 1
14529: PUSH
14530: FOR_IN
14531: IFFALSE 14544
// RemoveUnit ( un ) ;
14533: LD_VAR 0 2
14537: PPUSH
14538: CALL_OW 64
14542: GO 14530
14544: POP
14545: POP
// until not list ;
14546: LD_VAR 0 3
14550: NOT
14551: IFFALSE 14413
// end ;
14553: PPOPN 3
14555: END
// every 0 0$2.3 trigger Base_Destroyed ( ru ) do var list , sol , un ;
14556: LD_EXP 2
14560: PPUSH
14561: CALL 13573 0 1
14565: IFFALSE 15105
14567: GO 14569
14569: DISABLE
14570: LD_INT 0
14572: PPUSH
14573: PPUSH
14574: PPUSH
// begin if IsOK ( Platonov ) then
14575: LD_EXP 55
14579: PPUSH
14580: CALL_OW 302
14584: IFFALSE 14662
// begin CenterOnUnits ( Platonov ) ;
14586: LD_EXP 55
14590: PPUSH
14591: CALL_OW 85
// DialogueOn ;
14595: CALL_OW 6
// interface_hidden := true ;
14599: LD_ADDR_OWVAR 54
14603: PUSH
14604: LD_INT 1
14606: ST_TO_ADDR
// Say ( Platonov , DSurrenderRussians-Pla-1 ) ;
14607: LD_EXP 55
14611: PPUSH
14612: LD_STRING DSurrenderRussians-Pla-1
14614: PPUSH
14615: CALL_OW 88
// Say ( Burlak , DSurrenderRussians-Bur-1 ) ;
14619: LD_EXP 12
14623: PPUSH
14624: LD_STRING DSurrenderRussians-Bur-1
14626: PPUSH
14627: CALL_OW 88
// interface_hidden := false ;
14631: LD_ADDR_OWVAR 54
14635: PUSH
14636: LD_INT 0
14638: ST_TO_ADDR
// DialogueOff ;
14639: CALL_OW 7
// repeat wait ( 0 0$1 ) ;
14643: LD_INT 35
14645: PPUSH
14646: CALL_OW 67
// until not IsOK ( Platonov ) ;
14650: LD_EXP 55
14654: PPUSH
14655: CALL_OW 302
14659: NOT
14660: IFFALSE 14643
// end ; cpu_list := cpu_list diff ru ;
14662: LD_ADDR_EXP 8
14666: PUSH
14667: LD_EXP 8
14671: PUSH
14672: LD_EXP 2
14676: DIFF
14677: ST_TO_ADDR
// SetAttitude ( you , ru , att_friend , true ) ;
14678: LD_EXP 1
14682: PPUSH
14683: LD_EXP 2
14687: PPUSH
14688: LD_INT 1
14690: PPUSH
14691: LD_INT 1
14693: PPUSH
14694: CALL_OW 80
// sol := FindLastMohycane ( ru ) ;
14698: LD_ADDR_VAR 0 2
14702: PUSH
14703: LD_EXP 2
14707: PPUSH
14708: CALL 15108 0 1
14712: ST_TO_ADDR
// if IsOK ( sol ) then
14713: LD_VAR 0 2
14717: PPUSH
14718: CALL_OW 302
14722: IFFALSE 14733
// ComExitBuilding ( sol ) ;
14724: LD_VAR 0 2
14728: PPUSH
14729: CALL_OW 122
// repeat un := FilterAllUnits ( [ [ f_side , you ] , [ f_ok ] ] ) ;
14733: LD_ADDR_VAR 0 3
14737: PUSH
14738: LD_INT 22
14740: PUSH
14741: LD_EXP 1
14745: PUSH
14746: EMPTY
14747: LIST
14748: LIST
14749: PUSH
14750: LD_INT 50
14752: PUSH
14753: EMPTY
14754: LIST
14755: PUSH
14756: EMPTY
14757: LIST
14758: LIST
14759: PPUSH
14760: CALL_OW 69
14764: ST_TO_ADDR
// ComMoveUnit ( sol , NearestUnitToUnit ( un , sol ) ) ;
14765: LD_VAR 0 2
14769: PPUSH
14770: LD_VAR 0 3
14774: PPUSH
14775: LD_VAR 0 2
14779: PPUSH
14780: CALL_OW 74
14784: PPUSH
14785: CALL_OW 112
// wait ( 0 0$1 ) ;
14789: LD_INT 35
14791: PPUSH
14792: CALL_OW 67
// until See ( you , sol ) ;
14796: LD_EXP 1
14800: PPUSH
14801: LD_VAR 0 2
14805: PPUSH
14806: CALL_OW 292
14810: IFFALSE 14733
// CenterOnUnits ( sol ) ;
14812: LD_VAR 0 2
14816: PPUSH
14817: CALL_OW 85
// DialogueOn ;
14821: CALL_OW 6
// interface_hidden := true ;
14825: LD_ADDR_OWVAR 54
14829: PUSH
14830: LD_INT 1
14832: ST_TO_ADDR
// case camp of 4 :
14833: LD_EXP 7
14837: PUSH
14838: LD_INT 4
14840: DOUBLE
14841: EQUAL
14842: IFTRUE 14846
14844: GO 14861
14846: POP
// Say ( sol , DSurrenderRussians-Rsol1-1a ) ; 6 :
14847: LD_VAR 0 2
14851: PPUSH
14852: LD_STRING DSurrenderRussians-Rsol1-1a
14854: PPUSH
14855: CALL_OW 88
14859: GO 14885
14861: LD_INT 6
14863: DOUBLE
14864: EQUAL
14865: IFTRUE 14869
14867: GO 14884
14869: POP
// Say ( sol , DSurrenderRussians-Rsol1-1 ) ; end ;
14870: LD_VAR 0 2
14874: PPUSH
14875: LD_STRING DSurrenderRussians-Rsol1-1
14877: PPUSH
14878: CALL_OW 88
14882: GO 14885
14884: POP
// interface_hidden := false ;
14885: LD_ADDR_OWVAR 54
14889: PUSH
14890: LD_INT 0
14892: ST_TO_ADDR
// DialogueOff ;
14893: CALL_OW 7
// finalize := finalize + 1 ;
14897: LD_ADDR_EXP 57
14901: PUSH
14902: LD_EXP 57
14906: PUSH
14907: LD_INT 1
14909: PLUS
14910: ST_TO_ADDR
// list := FilterAllUnits ( [ [ f_side , ru ] , f_not , [ f_type , unit_human ] ] ) ;
14911: LD_ADDR_VAR 0 1
14915: PUSH
14916: LD_INT 22
14918: PUSH
14919: LD_EXP 2
14923: PUSH
14924: EMPTY
14925: LIST
14926: LIST
14927: PUSH
14928: LD_INT 3
14930: PUSH
14931: LD_INT 21
14933: PUSH
14934: LD_INT 1
14936: PUSH
14937: EMPTY
14938: LIST
14939: LIST
14940: PUSH
14941: EMPTY
14942: LIST
14943: LIST
14944: LIST
14945: PPUSH
14946: CALL_OW 69
14950: ST_TO_ADDR
// SetSide ( list , you ) ;
14951: LD_VAR 0 1
14955: PPUSH
14956: LD_EXP 1
14960: PPUSH
14961: CALL_OW 235
// repeat list := FilterAllUnits ( [ [ f_side , ru ] , [ f_type , unit_human ] , [ f_ok ] ] ) ;
14965: LD_ADDR_VAR 0 1
14969: PUSH
14970: LD_INT 22
14972: PUSH
14973: LD_EXP 2
14977: PUSH
14978: EMPTY
14979: LIST
14980: LIST
14981: PUSH
14982: LD_INT 21
14984: PUSH
14985: LD_INT 1
14987: PUSH
14988: EMPTY
14989: LIST
14990: LIST
14991: PUSH
14992: LD_INT 50
14994: PUSH
14995: EMPTY
14996: LIST
14997: PUSH
14998: EMPTY
14999: LIST
15000: LIST
15001: LIST
15002: PPUSH
15003: CALL_OW 69
15007: ST_TO_ADDR
// ComMoveToArea ( list , ru_leaving_area ) ;
15008: LD_VAR 0 1
15012: PPUSH
15013: LD_INT 31
15015: PPUSH
15016: CALL_OW 113
// if list then
15020: LD_VAR 0 1
15024: IFFALSE 15033
// wait ( 0 0$2 ) ;
15026: LD_INT 70
15028: PPUSH
15029: CALL_OW 67
// sol := FilterUnitsInArea ( ru_leaving_area , [ [ f_side , ru ] , [ f_type , unit_human ] ] ) ;
15033: LD_ADDR_VAR 0 2
15037: PUSH
15038: LD_INT 31
15040: PPUSH
15041: LD_INT 22
15043: PUSH
15044: LD_EXP 2
15048: PUSH
15049: EMPTY
15050: LIST
15051: LIST
15052: PUSH
15053: LD_INT 21
15055: PUSH
15056: LD_INT 1
15058: PUSH
15059: EMPTY
15060: LIST
15061: LIST
15062: PUSH
15063: EMPTY
15064: LIST
15065: LIST
15066: PPUSH
15067: CALL_OW 70
15071: ST_TO_ADDR
// for un in sol do
15072: LD_ADDR_VAR 0 3
15076: PUSH
15077: LD_VAR 0 2
15081: PUSH
15082: FOR_IN
15083: IFFALSE 15096
// RemoveUnit ( un ) ;
15085: LD_VAR 0 3
15089: PPUSH
15090: CALL_OW 64
15094: GO 15082
15096: POP
15097: POP
// until not list ;
15098: LD_VAR 0 1
15102: NOT
15103: IFFALSE 14965
// end ;
15105: PPOPN 3
15107: END
// function FindLastMohycane ( side ) ; var area , un , list , build , unseen , vysledek ; begin
15108: LD_INT 0
15110: PPUSH
15111: PPUSH
15112: PPUSH
15113: PPUSH
15114: PPUSH
15115: PPUSH
15116: PPUSH
// case side of us :
15117: LD_VAR 0 1
15121: PUSH
15122: LD_EXP 3
15126: DOUBLE
15127: EQUAL
15128: IFTRUE 15132
15130: GO 15143
15132: POP
// area := us_base ; ru :
15133: LD_ADDR_VAR 0 3
15137: PUSH
15138: LD_INT 11
15140: ST_TO_ADDR
15141: GO 15165
15143: LD_EXP 2
15147: DOUBLE
15148: EQUAL
15149: IFTRUE 15153
15151: GO 15164
15153: POP
// area := ru_base ; end ;
15154: LD_ADDR_VAR 0 3
15158: PUSH
15159: LD_INT 12
15161: ST_TO_ADDR
15162: GO 15165
15164: POP
// list := FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_human ] , [ f_sex , sex_male ] , [ f_ok ] ] ) ;
15165: LD_ADDR_VAR 0 5
15169: PUSH
15170: LD_INT 22
15172: PUSH
15173: LD_VAR 0 1
15177: PUSH
15178: EMPTY
15179: LIST
15180: LIST
15181: PUSH
15182: LD_INT 21
15184: PUSH
15185: LD_INT 1
15187: PUSH
15188: EMPTY
15189: LIST
15190: LIST
15191: PUSH
15192: LD_INT 26
15194: PUSH
15195: LD_INT 1
15197: PUSH
15198: EMPTY
15199: LIST
15200: LIST
15201: PUSH
15202: LD_INT 50
15204: PUSH
15205: EMPTY
15206: LIST
15207: PUSH
15208: EMPTY
15209: LIST
15210: LIST
15211: LIST
15212: LIST
15213: PPUSH
15214: CALL_OW 69
15218: ST_TO_ADDR
// if list then
15219: LD_VAR 0 5
15223: IFFALSE 15245
// vysledek := FindMaxSkill ( list , skill_combat ) else
15225: LD_ADDR_VAR 0 8
15229: PUSH
15230: LD_VAR 0 5
15234: PPUSH
15235: LD_INT 1
15237: PPUSH
15238: CALL_OW 433
15242: ST_TO_ADDR
15243: GO 15405
// begin unseen := 0 ;
15245: LD_ADDR_VAR 0 7
15249: PUSH
15250: LD_INT 0
15252: ST_TO_ADDR
// build := FilterAllUnits ( [ [ f_side , side ] , [ f_empty ] , [ f_ok ] ] ) ;
15253: LD_ADDR_VAR 0 6
15257: PUSH
15258: LD_INT 22
15260: PUSH
15261: LD_VAR 0 1
15265: PUSH
15266: EMPTY
15267: LIST
15268: LIST
15269: PUSH
15270: LD_INT 58
15272: PUSH
15273: EMPTY
15274: LIST
15275: PUSH
15276: LD_INT 50
15278: PUSH
15279: EMPTY
15280: LIST
15281: PUSH
15282: EMPTY
15283: LIST
15284: LIST
15285: LIST
15286: PPUSH
15287: CALL_OW 69
15291: ST_TO_ADDR
// for un in build do
15292: LD_ADDR_VAR 0 4
15296: PUSH
15297: LD_VAR 0 6
15301: PUSH
15302: FOR_IN
15303: IFFALSE 15336
// if not See ( you , un ) then
15305: LD_EXP 1
15309: PPUSH
15310: LD_VAR 0 4
15314: PPUSH
15315: CALL_OW 292
15319: NOT
15320: IFFALSE 15334
// begin unseen := un ;
15322: LD_ADDR_VAR 0 7
15326: PUSH
15327: LD_VAR 0 4
15331: ST_TO_ADDR
// break ;
15332: GO 15336
// end ;
15334: GO 15302
15336: POP
15337: POP
// if ( not unseen ) and build then
15338: LD_VAR 0 7
15342: NOT
15343: PUSH
15344: LD_VAR 0 6
15348: AND
15349: IFFALSE 15365
// unseen := build [ 1 ] ;
15351: LD_ADDR_VAR 0 7
15355: PUSH
15356: LD_VAR 0 6
15360: PUSH
15361: LD_INT 1
15363: ARRAY
15364: ST_TO_ADDR
// if unseen then
15365: LD_VAR 0 7
15369: IFFALSE 15405
// begin PrepareSoldier ( sex_male , 5 ) ;
15371: LD_INT 1
15373: PPUSH
15374: LD_INT 5
15376: PPUSH
15377: CALL_OW 381
// vysledek := CreateHuman ;
15381: LD_ADDR_VAR 0 8
15385: PUSH
15386: CALL_OW 44
15390: ST_TO_ADDR
// PlaceHumanInUnit ( vysledek , unseen ) ;
15391: LD_VAR 0 8
15395: PPUSH
15396: LD_VAR 0 7
15400: PPUSH
15401: CALL_OW 52
// end ; end ; result := vysledek ;
15405: LD_ADDR_VAR 0 2
15409: PUSH
15410: LD_VAR 0 8
15414: ST_TO_ADDR
// end ; end_of_file
15415: LD_VAR 0 2
15419: RET
// export function lets_talking ; begin
15420: LD_INT 0
15422: PPUSH
// DialogueOn ;
15423: CALL_OW 6
// interface_hidden := true ;
15427: LD_ADDR_OWVAR 54
15431: PUSH
15432: LD_INT 1
15434: ST_TO_ADDR
// case camp of 4 :
15435: LD_EXP 7
15439: PUSH
15440: LD_INT 4
15442: DOUBLE
15443: EQUAL
15444: IFTRUE 15448
15446: GO 15455
15448: POP
// us_talking ; 6 :
15449: CALL 16520 0 0
15453: GO 15471
15455: LD_INT 6
15457: DOUBLE
15458: EQUAL
15459: IFTRUE 15463
15461: GO 15470
15463: POP
// ru_talking ; end ;
15464: CALL 15488 0 0
15468: GO 15471
15470: POP
// interface_hidden := false ;
15471: LD_ADDR_OWVAR 54
15475: PUSH
15476: LD_INT 0
15478: ST_TO_ADDR
// DialogueOff ;
15479: CALL_OW 7
// end ;
15483: LD_VAR 0 1
15487: RET
// function ru_talking ; begin
15488: LD_INT 0
15490: PPUSH
// if IsOK ( Burlak ) then
15491: LD_EXP 12
15495: PPUSH
15496: CALL_OW 302
15500: IFFALSE 15523
// begin CenterOnUnits ( Burlak ) ;
15502: LD_EXP 12
15506: PPUSH
15507: CALL_OW 85
// Say ( Burlak , DEnd-Burlak-Bur-1 ) ;
15511: LD_EXP 12
15515: PPUSH
15516: LD_STRING DEnd-Burlak-Bur-1
15518: PPUSH
15519: CALL_OW 88
// end ; if IsOK ( Petrosyan ) then
15523: LD_EXP 16
15527: PPUSH
15528: CALL_OW 302
15532: IFFALSE 15555
// begin CenterOnUnits ( Petrosyan ) ;
15534: LD_EXP 16
15538: PPUSH
15539: CALL_OW 85
// Say ( Petrosyan , DEnd-Burlak-Pty-1 ) ;
15543: LD_EXP 16
15547: PPUSH
15548: LD_STRING DEnd-Burlak-Pty-1
15550: PPUSH
15551: CALL_OW 88
// end ; if IsOK ( Belkov ) then
15555: LD_EXP 17
15559: PPUSH
15560: CALL_OW 302
15564: IFFALSE 15587
// begin CenterOnUnits ( Belkov ) ;
15566: LD_EXP 17
15570: PPUSH
15571: CALL_OW 85
// Say ( Belkov , DEnd-Burlak-Bel-1 ) ;
15575: LD_EXP 17
15579: PPUSH
15580: LD_STRING DEnd-Burlak-Bel-1
15582: PPUSH
15583: CALL_OW 88
// end ; if IsOK ( Kirilenkova ) then
15587: LD_EXP 18
15591: PPUSH
15592: CALL_OW 302
15596: IFFALSE 15619
// begin CenterOnUnits ( Kirilenkova ) ;
15598: LD_EXP 18
15602: PPUSH
15603: CALL_OW 85
// Say ( Kirilenkova , DEnd-Burlak-Kir-1 ) ;
15607: LD_EXP 18
15611: PPUSH
15612: LD_STRING DEnd-Burlak-Kir-1
15614: PPUSH
15615: CALL_OW 88
// end ; if IsOK ( Gnyevko ) then
15619: LD_EXP 19
15623: PPUSH
15624: CALL_OW 302
15628: IFFALSE 15651
// begin CenterOnUnits ( Gnyevko ) ;
15630: LD_EXP 19
15634: PPUSH
15635: CALL_OW 85
// Say ( Gnyevko , DEnd-Burlak-Gny-1 ) ;
15639: LD_EXP 19
15643: PPUSH
15644: LD_STRING DEnd-Burlak-Gny-1
15646: PPUSH
15647: CALL_OW 88
// end ; if IsOK ( Gladkov ) then
15651: LD_EXP 20
15655: PPUSH
15656: CALL_OW 302
15660: IFFALSE 15683
// begin CenterOnUnits ( Gladkov ) ;
15662: LD_EXP 20
15666: PPUSH
15667: CALL_OW 85
// Say ( Gladkov , DEnd-Burlak-Gla-1 ) ;
15671: LD_EXP 20
15675: PPUSH
15676: LD_STRING DEnd-Burlak-Gla-1
15678: PPUSH
15679: CALL_OW 88
// end ; if IsOK ( Dolgov ) then
15683: LD_EXP 21
15687: PPUSH
15688: CALL_OW 302
15692: IFFALSE 15715
// begin CenterOnUnits ( Dolgov ) ;
15694: LD_EXP 21
15698: PPUSH
15699: CALL_OW 85
// Say ( Dolgov , DEnd-Burlak-Dol-1 ) ;
15703: LD_EXP 21
15707: PPUSH
15708: LD_STRING DEnd-Burlak-Dol-1
15710: PPUSH
15711: CALL_OW 88
// end ; if IsOK ( Kapitsova ) then
15715: LD_EXP 23
15719: PPUSH
15720: CALL_OW 302
15724: IFFALSE 15747
// begin CenterOnUnits ( Kapitsova ) ;
15726: LD_EXP 23
15730: PPUSH
15731: CALL_OW 85
// Say ( Kapitsova , DEnd-Burlak-Kap-1 ) ;
15735: LD_EXP 23
15739: PPUSH
15740: LD_STRING DEnd-Burlak-Kap-1
15742: PPUSH
15743: CALL_OW 88
// end ; if IsOK ( Gleb ) then
15747: LD_EXP 22
15751: PPUSH
15752: CALL_OW 302
15756: IFFALSE 15779
// begin CenterOnUnits ( Gleb ) ;
15758: LD_EXP 22
15762: PPUSH
15763: CALL_OW 85
// Say ( Gleb , DEnd-JMM-Glb-1 ) ;
15767: LD_EXP 22
15771: PPUSH
15772: LD_STRING DEnd-JMM-Glb-1
15774: PPUSH
15775: CALL_OW 88
// end ; if IsOK ( Kuzmov ) then
15779: LD_EXP 24
15783: PPUSH
15784: CALL_OW 302
15788: IFFALSE 15811
// begin CenterOnUnits ( Kuzmov ) ;
15790: LD_EXP 24
15794: PPUSH
15795: CALL_OW 85
// Say ( Kuzmov , DEnd-Burlak-Kuz-1 ) ;
15799: LD_EXP 24
15803: PPUSH
15804: LD_STRING DEnd-Burlak-Kuz-1
15806: PPUSH
15807: CALL_OW 88
// end ; if IsOK ( Kovalyuk ) then
15811: LD_EXP 25
15815: PPUSH
15816: CALL_OW 302
15820: IFFALSE 15843
// begin CenterOnUnits ( Kovalyuk ) ;
15822: LD_EXP 25
15826: PPUSH
15827: CALL_OW 85
// Say ( Kovalyuk , DEnd-Burlak-Kov-1 ) ;
15831: LD_EXP 25
15835: PPUSH
15836: LD_STRING DEnd-Burlak-Kov-1
15838: PPUSH
15839: CALL_OW 88
// end ; if IsOK ( Scholtze ) then
15843: LD_EXP 26
15847: PPUSH
15848: CALL_OW 302
15852: IFFALSE 15875
// begin CenterOnUnits ( Scholtze ) ;
15854: LD_EXP 26
15858: PPUSH
15859: CALL_OW 85
// Say ( Scholtze , DEnd-Burlak-Sch-1 ) ;
15863: LD_EXP 26
15867: PPUSH
15868: LD_STRING DEnd-Burlak-Sch-1
15870: PPUSH
15871: CALL_OW 88
// end ; if IsOK ( Karamazov ) then
15875: LD_EXP 27
15879: PPUSH
15880: CALL_OW 302
15884: IFFALSE 15907
// begin CenterOnUnits ( Karamazov ) ;
15886: LD_EXP 27
15890: PPUSH
15891: CALL_OW 85
// Say ( Karamazov , DEnd-Burlak-Kar-1 ) ;
15895: LD_EXP 27
15899: PPUSH
15900: LD_STRING DEnd-Burlak-Kar-1
15902: PPUSH
15903: CALL_OW 88
// end ; if IsOK ( Titov ) then
15907: LD_EXP 28
15911: PPUSH
15912: CALL_OW 302
15916: IFFALSE 15939
// begin CenterOnUnits ( Titov ) ;
15918: LD_EXP 28
15922: PPUSH
15923: CALL_OW 85
// Say ( Titov , DEnd-Burlak-Tit-1 ) ;
15927: LD_EXP 28
15931: PPUSH
15932: LD_STRING DEnd-Burlak-Tit-1
15934: PPUSH
15935: CALL_OW 88
// end ; if IsOK ( Oblukov ) then
15939: LD_EXP 29
15943: PPUSH
15944: CALL_OW 302
15948: IFFALSE 15971
// begin CenterOnUnits ( Oblukov ) ;
15950: LD_EXP 29
15954: PPUSH
15955: CALL_OW 85
// Say ( Oblukov , DEnd-Burlak-Obl-1 ) ;
15959: LD_EXP 29
15963: PPUSH
15964: LD_STRING DEnd-Burlak-Obl-1
15966: PPUSH
15967: CALL_OW 88
// end ; if IsOK ( Kozlov ) then
15971: LD_EXP 30
15975: PPUSH
15976: CALL_OW 302
15980: IFFALSE 16003
// begin CenterOnUnits ( Kozlov ) ;
15982: LD_EXP 30
15986: PPUSH
15987: CALL_OW 85
// Say ( Kozlov , DEnd-Burlak-Koz-1 ) ;
15991: LD_EXP 30
15995: PPUSH
15996: LD_STRING DEnd-Burlak-Koz-1
15998: PPUSH
15999: CALL_OW 88
// end ; if IsOK ( Petrovova ) then
16003: LD_EXP 31
16007: PPUSH
16008: CALL_OW 302
16012: IFFALSE 16035
// begin CenterOnUnits ( Petrovova ) ;
16014: LD_EXP 31
16018: PPUSH
16019: CALL_OW 85
// Say ( Petrovova , DEnd-Burlak-Ptr-1 ) ;
16023: LD_EXP 31
16027: PPUSH
16028: LD_STRING DEnd-Burlak-Ptr-1
16030: PPUSH
16031: CALL_OW 88
// end ; if IsOK ( Bystrov ) then
16035: LD_EXP 32
16039: PPUSH
16040: CALL_OW 302
16044: IFFALSE 16067
// begin CenterOnUnits ( Bystrov ) ;
16046: LD_EXP 32
16050: PPUSH
16051: CALL_OW 85
// Say ( Bystrov , DEnd-Burlak-Bys-1 ) ;
16055: LD_EXP 32
16059: PPUSH
16060: LD_STRING DEnd-Burlak-Bys-1
16062: PPUSH
16063: CALL_OW 88
// end ; if IsOK ( Lipshchin ) then
16067: LD_EXP 33
16071: PPUSH
16072: CALL_OW 302
16076: IFFALSE 16099
// begin CenterOnUnits ( Lipshchin ) ;
16078: LD_EXP 33
16082: PPUSH
16083: CALL_OW 85
// Say ( Lipshchin , DEnd-Burlak-Lip-1 ) ;
16087: LD_EXP 33
16091: PPUSH
16092: LD_STRING DEnd-Burlak-Lip-1
16094: PPUSH
16095: CALL_OW 88
// end ; if IsOK ( Fadeev ) then
16099: LD_EXP 34
16103: PPUSH
16104: CALL_OW 302
16108: IFFALSE 16131
// begin CenterOnUnits ( Fadeev ) ;
16110: LD_EXP 34
16114: PPUSH
16115: CALL_OW 85
// Say ( Fadeev , DEnd-Burlak-Fad-1 ) ;
16119: LD_EXP 34
16123: PPUSH
16124: LD_STRING DEnd-Burlak-Fad-1
16126: PPUSH
16127: CALL_OW 88
// end ; if IsOK ( MacMillan ) then
16131: LD_EXP 13
16135: PPUSH
16136: CALL_OW 302
16140: IFFALSE 16163
// begin CenterOnUnits ( MacMillan ) ;
16142: LD_EXP 13
16146: PPUSH
16147: CALL_OW 85
// Say ( MacMillan , DEnd-Burlak-JMM-1 ) ;
16151: LD_EXP 13
16155: PPUSH
16156: LD_STRING DEnd-Burlak-JMM-1
16158: PPUSH
16159: CALL_OW 88
// end ; if IsOK ( Lisa ) then
16163: LD_EXP 46
16167: PPUSH
16168: CALL_OW 302
16172: IFFALSE 16195
// begin CenterOnUnits ( Lisa ) ;
16174: LD_EXP 46
16178: PPUSH
16179: CALL_OW 85
// Say ( Lisa , DEnd-Burlak-Lisa-1 ) ;
16183: LD_EXP 46
16187: PPUSH
16188: LD_STRING DEnd-Burlak-Lisa-1
16190: PPUSH
16191: CALL_OW 88
// end ; if IsOK ( Joan ) then
16195: LD_EXP 45
16199: PPUSH
16200: CALL_OW 302
16204: IFFALSE 16227
// begin CenterOnUnits ( Joan ) ;
16206: LD_EXP 45
16210: PPUSH
16211: CALL_OW 85
// Say ( Joan , DEnd-Burlak-Joan-1 ) ;
16215: LD_EXP 45
16219: PPUSH
16220: LD_STRING DEnd-Burlak-Joan-1
16222: PPUSH
16223: CALL_OW 88
// end ; if IsOK ( Frank ) then
16227: LD_EXP 42
16231: PPUSH
16232: CALL_OW 302
16236: IFFALSE 16259
// begin CenterOnUnits ( Frank ) ;
16238: LD_EXP 42
16242: PPUSH
16243: CALL_OW 85
// Say ( Frank , DEnd-Burlak-Frank-1 ) ;
16247: LD_EXP 42
16251: PPUSH
16252: LD_STRING DEnd-Burlak-Frank-1
16254: PPUSH
16255: CALL_OW 88
// end ; if IsOK ( Cyrus ) then
16259: LD_EXP 39
16263: PPUSH
16264: CALL_OW 302
16268: IFFALSE 16291
// begin CenterOnUnits ( Cyrus ) ;
16270: LD_EXP 39
16274: PPUSH
16275: CALL_OW 85
// Say ( Cyrus , DEnd-Burlak-Cyrus-1 ) ;
16279: LD_EXP 39
16283: PPUSH
16284: LD_STRING DEnd-Burlak-Cyrus-1
16286: PPUSH
16287: CALL_OW 88
// end ; if IsOK ( Donaldson ) then
16291: LD_EXP 41
16295: PPUSH
16296: CALL_OW 302
16300: IFFALSE 16323
// begin CenterOnUnits ( Donaldson ) ;
16302: LD_EXP 41
16306: PPUSH
16307: CALL_OW 85
// Say ( Donaldson , DEnd-Burlak-Don-1 ) ;
16311: LD_EXP 41
16315: PPUSH
16316: LD_STRING DEnd-Burlak-Don-1
16318: PPUSH
16319: CALL_OW 88
// end ; if IsOK ( Bobby ) then
16323: LD_EXP 35
16327: PPUSH
16328: CALL_OW 302
16332: IFFALSE 16355
// begin CenterOnUnits ( Bobby ) ;
16334: LD_EXP 35
16338: PPUSH
16339: CALL_OW 85
// Say ( Bobby , DEnd-Burlak-Bobby-1 ) ;
16343: LD_EXP 35
16347: PPUSH
16348: LD_STRING DEnd-Burlak-Bobby-1
16350: PPUSH
16351: CALL_OW 88
// end ; if IsOK ( Denis ) then
16355: LD_EXP 40
16359: PPUSH
16360: CALL_OW 302
16364: IFFALSE 16387
// begin CenterOnUnits ( Denis ) ;
16366: LD_EXP 40
16370: PPUSH
16371: CALL_OW 85
// Say ( Denis , DEnd-Burlak-Den-1 ) ;
16375: LD_EXP 40
16379: PPUSH
16380: LD_STRING DEnd-Burlak-Den-1
16382: PPUSH
16383: CALL_OW 88
// end ; if IsOK ( Gladstone ) then
16387: LD_EXP 44
16391: PPUSH
16392: CALL_OW 302
16396: IFFALSE 16419
// begin CenterOnUnits ( Gladstone ) ;
16398: LD_EXP 44
16402: PPUSH
16403: CALL_OW 85
// Say ( Gladstone , DEnd-Burlak-Glad-1 ) ;
16407: LD_EXP 44
16411: PPUSH
16412: LD_STRING DEnd-Burlak-Glad-1
16414: PPUSH
16415: CALL_OW 88
// end ; if IsOK ( Yamoko ) then
16419: LD_EXP 50
16423: PPUSH
16424: CALL_OW 302
16428: IFFALSE 16451
// begin CenterOnUnits ( Yamoko ) ;
16430: LD_EXP 50
16434: PPUSH
16435: CALL_OW 85
// Say ( Yamoko , DEnd-Burlak-Yam-1 ) ;
16439: LD_EXP 50
16443: PPUSH
16444: LD_STRING DEnd-Burlak-Yam-1
16446: PPUSH
16447: CALL_OW 88
// end ; if IsOK ( Brown ) then
16451: LD_EXP 36
16455: PPUSH
16456: CALL_OW 302
16460: IFFALSE 16483
// begin CenterOnUnits ( Brown ) ;
16462: LD_EXP 36
16466: PPUSH
16467: CALL_OW 85
// Say ( Brown , DEnd-Burlak-Brown-1 ) ;
16471: LD_EXP 36
16475: PPUSH
16476: LD_STRING DEnd-Burlak-Brown-1
16478: PPUSH
16479: CALL_OW 88
// end ; if IsOK ( Roth ) then
16483: LD_EXP 14
16487: PPUSH
16488: CALL_OW 302
16492: IFFALSE 16515
// begin CenterOnUnits ( Roth ) ;
16494: LD_EXP 14
16498: PPUSH
16499: CALL_OW 85
// Say ( Roth , DEnd-Burlak-Roth-1 ) ;
16503: LD_EXP 14
16507: PPUSH
16508: LD_STRING DEnd-Burlak-Roth-1
16510: PPUSH
16511: CALL_OW 88
// end ; end ;
16515: LD_VAR 0 1
16519: RET
// function us_talking ; begin
16520: LD_INT 0
16522: PPUSH
// if IsOK ( MacMillan ) then
16523: LD_EXP 13
16527: PPUSH
16528: CALL_OW 302
16532: IFFALSE 16555
// begin CenterOnUnits ( MacMillan ) ;
16534: LD_EXP 13
16538: PPUSH
16539: CALL_OW 85
// Say ( MacMillan , DEnd-JMM-JMM-1 ) ;
16543: LD_EXP 13
16547: PPUSH
16548: LD_STRING DEnd-JMM-JMM-1
16550: PPUSH
16551: CALL_OW 88
// end ; if IsOK ( Lisa ) then
16555: LD_EXP 46
16559: PPUSH
16560: CALL_OW 302
16564: IFFALSE 16587
// begin CenterOnUnits ( Lisa ) ;
16566: LD_EXP 46
16570: PPUSH
16571: CALL_OW 85
// Say ( Lisa , DEnd-JMM-Lisa-1 ) ;
16575: LD_EXP 46
16579: PPUSH
16580: LD_STRING DEnd-JMM-Lisa-1
16582: PPUSH
16583: CALL_OW 88
// end ; if IsOK ( Joan ) then
16587: LD_EXP 45
16591: PPUSH
16592: CALL_OW 302
16596: IFFALSE 16619
// begin CenterOnUnits ( Joan ) ;
16598: LD_EXP 45
16602: PPUSH
16603: CALL_OW 85
// Say ( Joan , DEnd-JMM-Joan-1 ) ;
16607: LD_EXP 45
16611: PPUSH
16612: LD_STRING DEnd-JMM-Joan-1
16614: PPUSH
16615: CALL_OW 88
// end ; if IsOK ( Frank ) then
16619: LD_EXP 42
16623: PPUSH
16624: CALL_OW 302
16628: IFFALSE 16651
// begin CenterOnUnits ( Frank ) ;
16630: LD_EXP 42
16634: PPUSH
16635: CALL_OW 85
// Say ( Frank , DEnd-JMM-Frank-1 ) ;
16639: LD_EXP 42
16643: PPUSH
16644: LD_STRING DEnd-JMM-Frank-1
16646: PPUSH
16647: CALL_OW 88
// end ; if IsOK ( Cyrus ) then
16651: LD_EXP 39
16655: PPUSH
16656: CALL_OW 302
16660: IFFALSE 16683
// begin CenterOnUnits ( Cyrus ) ;
16662: LD_EXP 39
16666: PPUSH
16667: CALL_OW 85
// Say ( Cyrus , DEnd-JMM-Cyrus-1 ) ;
16671: LD_EXP 39
16675: PPUSH
16676: LD_STRING DEnd-JMM-Cyrus-1
16678: PPUSH
16679: CALL_OW 88
// end ; if IsOK ( Cornell ) then
16683: LD_EXP 37
16687: PPUSH
16688: CALL_OW 302
16692: IFFALSE 16715
// begin CenterOnUnits ( Cornell ) ;
16694: LD_EXP 37
16698: PPUSH
16699: CALL_OW 85
// Say ( Cornell , DEnd-JMM-Corn-1 ) ;
16703: LD_EXP 37
16707: PPUSH
16708: LD_STRING DEnd-JMM-Corn-1
16710: PPUSH
16711: CALL_OW 88
// end ; if IsOK ( Donaldson ) then
16715: LD_EXP 41
16719: PPUSH
16720: CALL_OW 302
16724: IFFALSE 16747
// begin CenterOnUnits ( Donaldson ) ;
16726: LD_EXP 41
16730: PPUSH
16731: CALL_OW 85
// Say ( Donaldson , DEnd-JMM-Don-1 ) ;
16735: LD_EXP 41
16739: PPUSH
16740: LD_STRING DEnd-JMM-Don-1
16742: PPUSH
16743: CALL_OW 88
// end ; if IsOK ( Bobby ) then
16747: LD_EXP 35
16751: PPUSH
16752: CALL_OW 302
16756: IFFALSE 16779
// begin CenterOnUnits ( Bobby ) ;
16758: LD_EXP 35
16762: PPUSH
16763: CALL_OW 85
// Say ( Bobby , DEnd-JMM-Bobby-1 ) ;
16767: LD_EXP 35
16771: PPUSH
16772: LD_STRING DEnd-JMM-Bobby-1
16774: PPUSH
16775: CALL_OW 88
// end ; if IsOK ( Denis ) then
16779: LD_EXP 40
16783: PPUSH
16784: CALL_OW 302
16788: IFFALSE 16811
// begin CenterOnUnits ( Denis ) ;
16790: LD_EXP 40
16794: PPUSH
16795: CALL_OW 85
// Say ( Denis , DEnd-JMM-Den-1 ) ;
16799: LD_EXP 40
16803: PPUSH
16804: LD_STRING DEnd-JMM-Den-1
16806: PPUSH
16807: CALL_OW 88
// end ; if IsOK ( Gladstone ) then
16811: LD_EXP 44
16815: PPUSH
16816: CALL_OW 302
16820: IFFALSE 16843
// begin CenterOnUnits ( Gladstone ) ;
16822: LD_EXP 44
16826: PPUSH
16827: CALL_OW 85
// Say ( Gladstone , DEnd-JMM-Glad-1 ) ;
16831: LD_EXP 44
16835: PPUSH
16836: LD_STRING DEnd-JMM-Glad-1
16838: PPUSH
16839: CALL_OW 88
// end ; if IsOK ( Yamoko ) then
16843: LD_EXP 50
16847: PPUSH
16848: CALL_OW 302
16852: IFFALSE 16875
// begin CenterOnUnits ( Yamoko ) ;
16854: LD_EXP 50
16858: PPUSH
16859: CALL_OW 85
// Say ( Yamoko , DEnd-JMM-Yam-1 ) ;
16863: LD_EXP 50
16867: PPUSH
16868: LD_STRING DEnd-JMM-Yam-1
16870: PPUSH
16871: CALL_OW 88
// end ; if IsOK ( Brown ) then
16875: LD_EXP 36
16879: PPUSH
16880: CALL_OW 302
16884: IFFALSE 16907
// begin CenterOnUnits ( Brown ) ;
16886: LD_EXP 36
16890: PPUSH
16891: CALL_OW 85
// Say ( Brown , DEnd-JMM-Brown-1 ) ;
16895: LD_EXP 36
16899: PPUSH
16900: LD_STRING DEnd-JMM-Brown-1
16902: PPUSH
16903: CALL_OW 88
// end ; if IsOK ( Roth ) then
16907: LD_EXP 14
16911: PPUSH
16912: CALL_OW 302
16916: IFFALSE 16939
// begin CenterOnUnits ( Roth ) ;
16918: LD_EXP 14
16922: PPUSH
16923: CALL_OW 85
// Say ( Roth , DEnd-JMM-Roth-1 ) ;
16927: LD_EXP 14
16931: PPUSH
16932: LD_STRING DEnd-JMM-Roth-1
16934: PPUSH
16935: CALL_OW 88
// end ; if IsOK ( Connie ) then
16939: LD_EXP 38
16943: PPUSH
16944: CALL_OW 302
16948: IFFALSE 16971
// begin CenterOnUnits ( Connie ) ;
16950: LD_EXP 38
16954: PPUSH
16955: CALL_OW 85
// Say ( Connie , DEnd-JMM-Con-1 ) ;
16959: LD_EXP 38
16963: PPUSH
16964: LD_STRING DEnd-JMM-Con-1
16966: PPUSH
16967: CALL_OW 88
// end ; if IsOK ( Gary ) then
16971: LD_EXP 43
16975: PPUSH
16976: CALL_OW 302
16980: IFFALSE 17003
// begin CenterOnUnits ( Gary ) ;
16982: LD_EXP 43
16986: PPUSH
16987: CALL_OW 85
// Say ( Gary , DEnd-JMM-Gary-1 ) ;
16991: LD_EXP 43
16995: PPUSH
16996: LD_STRING DEnd-JMM-Gary-1
16998: PPUSH
16999: CALL_OW 88
// end ; if IsOK ( Simms ) then
17003: LD_EXP 48
17007: PPUSH
17008: CALL_OW 302
17012: IFFALSE 17035
// begin CenterOnUnits ( Simms ) ;
17014: LD_EXP 48
17018: PPUSH
17019: CALL_OW 85
// Say ( Simms , DEnd-JMM-Sim-1 ) ;
17023: LD_EXP 48
17027: PPUSH
17028: LD_STRING DEnd-JMM-Sim-1
17030: PPUSH
17031: CALL_OW 88
// end ; if IsOK ( VanHouten ) then
17035: LD_EXP 49
17039: PPUSH
17040: CALL_OW 302
17044: IFFALSE 17067
// begin CenterOnUnits ( VanHouten ) ;
17046: LD_EXP 49
17050: PPUSH
17051: CALL_OW 85
// Say ( VanHouten , DEnd-JMM-VanH-1 ) ;
17055: LD_EXP 49
17059: PPUSH
17060: LD_STRING DEnd-JMM-VanH-1
17062: PPUSH
17063: CALL_OW 88
// end ; if IsOK ( Burlak ) then
17067: LD_EXP 12
17071: PPUSH
17072: CALL_OW 302
17076: IFFALSE 17099
// begin CenterOnUnits ( Burlak ) ;
17078: LD_EXP 12
17082: PPUSH
17083: CALL_OW 85
// Say ( Burlak , DEnd-JMM-Bur-1 ) ;
17087: LD_EXP 12
17091: PPUSH
17092: LD_STRING DEnd-JMM-Bur-1
17094: PPUSH
17095: CALL_OW 88
// end ; if IsOK ( Belkov ) then
17099: LD_EXP 17
17103: PPUSH
17104: CALL_OW 302
17108: IFFALSE 17131
// begin CenterOnUnits ( Belkov ) ;
17110: LD_EXP 17
17114: PPUSH
17115: CALL_OW 85
// Say ( Belkov , DEnd-JMM-Bel-1 ) ;
17119: LD_EXP 17
17123: PPUSH
17124: LD_STRING DEnd-JMM-Bel-1
17126: PPUSH
17127: CALL_OW 88
// end ; if IsOK ( Gnyevko ) then
17131: LD_EXP 19
17135: PPUSH
17136: CALL_OW 302
17140: IFFALSE 17163
// begin CenterOnUnits ( Gnyevko ) ;
17142: LD_EXP 19
17146: PPUSH
17147: CALL_OW 85
// Say ( Gnyevko , DEnd-JMM-Gny-1 ) ;
17151: LD_EXP 19
17155: PPUSH
17156: LD_STRING DEnd-JMM-Gny-1
17158: PPUSH
17159: CALL_OW 88
// end ; if IsOK ( Dolgov ) then
17163: LD_EXP 21
17167: PPUSH
17168: CALL_OW 302
17172: IFFALSE 17195
// begin CenterOnUnits ( Dolgov ) ;
17174: LD_EXP 21
17178: PPUSH
17179: CALL_OW 85
// Say ( Dolgov , DEnd-JMM-Dol-1 ) ;
17183: LD_EXP 21
17187: PPUSH
17188: LD_STRING DEnd-JMM-Dol-1
17190: PPUSH
17191: CALL_OW 88
// end ; if IsOK ( Kapitsova ) then
17195: LD_EXP 23
17199: PPUSH
17200: CALL_OW 302
17204: IFFALSE 17227
// begin CenterOnUnits ( Kapitsova ) ;
17206: LD_EXP 23
17210: PPUSH
17211: CALL_OW 85
// Say ( Kapitsova , DEnd-JMM-Kap-1 ) ;
17215: LD_EXP 23
17219: PPUSH
17220: LD_STRING DEnd-JMM-Kap-1
17222: PPUSH
17223: CALL_OW 88
// end ; if IsOK ( Gleb ) then
17227: LD_EXP 22
17231: PPUSH
17232: CALL_OW 302
17236: IFFALSE 17259
// begin CenterOnUnits ( Gleb ) ;
17238: LD_EXP 22
17242: PPUSH
17243: CALL_OW 85
// Say ( Gleb , DEnd-JMM-Glb-1 ) ;
17247: LD_EXP 22
17251: PPUSH
17252: LD_STRING DEnd-JMM-Glb-1
17254: PPUSH
17255: CALL_OW 88
// end ; if IsOK ( Kovalyuk ) then
17259: LD_EXP 25
17263: PPUSH
17264: CALL_OW 302
17268: IFFALSE 17291
// begin CenterOnUnits ( Kovalyuk ) ;
17270: LD_EXP 25
17274: PPUSH
17275: CALL_OW 85
// Say ( Kovalyuk , DEnd-JMM-Kov-1 ) ;
17279: LD_EXP 25
17283: PPUSH
17284: LD_STRING DEnd-JMM-Kov-1
17286: PPUSH
17287: CALL_OW 88
// end ; if IsOK ( Scholtze ) then
17291: LD_EXP 26
17295: PPUSH
17296: CALL_OW 302
17300: IFFALSE 17323
// begin CenterOnUnits ( Scholtze ) ;
17302: LD_EXP 26
17306: PPUSH
17307: CALL_OW 85
// Say ( Scholtze , DEnd-JMM-Sch-1 ) ;
17311: LD_EXP 26
17315: PPUSH
17316: LD_STRING DEnd-JMM-Sch-1
17318: PPUSH
17319: CALL_OW 88
// end ; if IsOK ( Titov ) then
17323: LD_EXP 28
17327: PPUSH
17328: CALL_OW 302
17332: IFFALSE 17355
// begin CenterOnUnits ( Titov ) ;
17334: LD_EXP 28
17338: PPUSH
17339: CALL_OW 85
// Say ( Titov , DEnd-JMM-Tit-1 ) ;
17343: LD_EXP 28
17347: PPUSH
17348: LD_STRING DEnd-JMM-Tit-1
17350: PPUSH
17351: CALL_OW 88
// end ; if IsOK ( Oblukov ) then
17355: LD_EXP 29
17359: PPUSH
17360: CALL_OW 302
17364: IFFALSE 17387
// begin CenterOnUnits ( Oblukov ) ;
17366: LD_EXP 29
17370: PPUSH
17371: CALL_OW 85
// Say ( Oblukov , DEnd-JMM-Obl-1 ) ;
17375: LD_EXP 29
17379: PPUSH
17380: LD_STRING DEnd-JMM-Obl-1
17382: PPUSH
17383: CALL_OW 88
// end ; if IsOK ( Bystrov ) then
17387: LD_EXP 32
17391: PPUSH
17392: CALL_OW 302
17396: IFFALSE 17419
// begin CenterOnUnits ( Bystrov ) ;
17398: LD_EXP 32
17402: PPUSH
17403: CALL_OW 85
// Say ( Bystrov , DEnd-JMM-Bys-1 ) ;
17407: LD_EXP 32
17411: PPUSH
17412: LD_STRING DEnd-JMM-Bys-1
17414: PPUSH
17415: CALL_OW 88
// end ; if IsOK ( Lipshchin ) then
17419: LD_EXP 33
17423: PPUSH
17424: CALL_OW 302
17428: IFFALSE 17451
// begin CenterOnUnits ( Lipshchin ) ;
17430: LD_EXP 33
17434: PPUSH
17435: CALL_OW 85
// Say ( Lipshchin , DEnd-JMM-Lip-1 ) ;
17439: LD_EXP 33
17443: PPUSH
17444: LD_STRING DEnd-JMM-Lip-1
17446: PPUSH
17447: CALL_OW 88
// end ; end ; end_of_file
17451: LD_VAR 0 1
17455: RET
// var id_reg , id_def ; var BaseArea , DefendArea , Heal ; var docs ; var healing_un , wounded_un ; var central_base ; export function init_defend ; var side ; begin
17456: LD_INT 0
17458: PPUSH
17459: PPUSH
// BaseArea := [ us_base , ar_base , ru_base ] ;
17460: LD_ADDR_LOC 14
17464: PUSH
17465: LD_INT 11
17467: PUSH
17468: LD_INT 13
17470: PUSH
17471: LD_INT 12
17473: PUSH
17474: EMPTY
17475: LIST
17476: LIST
17477: LIST
17478: ST_TO_ADDR
// DefendArea := [ us_defend_base , ar_defend_base , ru_base ] ;
17479: LD_ADDR_LOC 15
17483: PUSH
17484: LD_INT 36
17486: PUSH
17487: LD_INT 37
17489: PUSH
17490: LD_INT 12
17492: PUSH
17493: EMPTY
17494: LIST
17495: LIST
17496: LIST
17497: ST_TO_ADDR
// Heal := [ us_heal , ar_heal , ru_heal ] ;
17498: LD_ADDR_LOC 16
17502: PUSH
17503: LD_INT 16
17505: PUSH
17506: LD_INT 14
17508: PUSH
17509: LD_INT 15
17511: PUSH
17512: EMPTY
17513: LIST
17514: LIST
17515: LIST
17516: ST_TO_ADDR
// docs := [ [ ] , [ ] , [ ] , [ ] , [ ] , [ ] , [ ] , [ ] ] ;
17517: LD_ADDR_LOC 17
17521: PUSH
17522: EMPTY
17523: PUSH
17524: EMPTY
17525: PUSH
17526: EMPTY
17527: PUSH
17528: EMPTY
17529: PUSH
17530: EMPTY
17531: PUSH
17532: EMPTY
17533: PUSH
17534: EMPTY
17535: PUSH
17536: EMPTY
17537: PUSH
17538: EMPTY
17539: LIST
17540: LIST
17541: LIST
17542: LIST
17543: LIST
17544: LIST
17545: LIST
17546: LIST
17547: ST_TO_ADDR
// central_base := [ [ 44 , 62 ] , [ 251 , 193 ] , [ 177 , 72 ] ] ;
17548: LD_ADDR_LOC 20
17552: PUSH
17553: LD_INT 44
17555: PUSH
17556: LD_INT 62
17558: PUSH
17559: EMPTY
17560: LIST
17561: LIST
17562: PUSH
17563: LD_INT 251
17565: PUSH
17566: LD_INT 193
17568: PUSH
17569: EMPTY
17570: LIST
17571: LIST
17572: PUSH
17573: LD_INT 177
17575: PUSH
17576: LD_INT 72
17578: PUSH
17579: EMPTY
17580: LIST
17581: LIST
17582: PUSH
17583: EMPTY
17584: LIST
17585: LIST
17586: LIST
17587: ST_TO_ADDR
// healing_un := [ ] ;
17588: LD_ADDR_LOC 18
17592: PUSH
17593: EMPTY
17594: ST_TO_ADDR
// wounded_un := [ ] ;
17595: LD_ADDR_LOC 19
17599: PUSH
17600: EMPTY
17601: ST_TO_ADDR
// start_defend ;
17602: CALL 17862 0 0
// end ;
17606: LD_VAR 0 1
17610: RET
// function prepare_defend ( side ) ; var seznam , def_buildings , def_vehicles , def_peoples ; begin
17611: LD_INT 0
17613: PPUSH
17614: PPUSH
17615: PPUSH
17616: PPUSH
17617: PPUSH
// def_buildings := FilterAllUnits ( [ [ f_side , side ] , [ f_or , [ f_btype , b_bunker ] , [ f_btype , b_breastwork ] ] ] ) ;
17618: LD_ADDR_VAR 0 4
17622: PUSH
17623: LD_INT 22
17625: PUSH
17626: LD_VAR 0 1
17630: PUSH
17631: EMPTY
17632: LIST
17633: LIST
17634: PUSH
17635: LD_INT 2
17637: PUSH
17638: LD_INT 30
17640: PUSH
17641: LD_INT 32
17643: PUSH
17644: EMPTY
17645: LIST
17646: LIST
17647: PUSH
17648: LD_INT 30
17650: PUSH
17651: LD_INT 31
17653: PUSH
17654: EMPTY
17655: LIST
17656: LIST
17657: PUSH
17658: EMPTY
17659: LIST
17660: LIST
17661: LIST
17662: PUSH
17663: EMPTY
17664: LIST
17665: LIST
17666: PPUSH
17667: CALL_OW 69
17671: ST_TO_ADDR
// def_peoples := FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_human ] , f_not , [ f_class , class_scientistic ] ] ) ;
17672: LD_ADDR_VAR 0 6
17676: PUSH
17677: LD_INT 22
17679: PUSH
17680: LD_VAR 0 1
17684: PUSH
17685: EMPTY
17686: LIST
17687: LIST
17688: PUSH
17689: LD_INT 21
17691: PUSH
17692: LD_INT 1
17694: PUSH
17695: EMPTY
17696: LIST
17697: LIST
17698: PUSH
17699: LD_INT 3
17701: PUSH
17702: LD_INT 25
17704: PUSH
17705: LD_INT 4
17707: PUSH
17708: EMPTY
17709: LIST
17710: LIST
17711: PUSH
17712: EMPTY
17713: LIST
17714: LIST
17715: LIST
17716: LIST
17717: PPUSH
17718: CALL_OW 69
17722: ST_TO_ADDR
// def_vehicles := FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_vehicle ] , f_not , [ f_or , [ f_weapon , us_cargo_bay ] , [ f_weapon , us_crane ] , [ f_weapon , ar_cargo_bay ] , [ f_weapon , ru_cargo_bay ] , [ f_weapon , ru_crane ] ] ] ) ;
17723: LD_ADDR_VAR 0 5
17727: PUSH
17728: LD_INT 22
17730: PUSH
17731: LD_VAR 0 1
17735: PUSH
17736: EMPTY
17737: LIST
17738: LIST
17739: PUSH
17740: LD_INT 21
17742: PUSH
17743: LD_INT 2
17745: PUSH
17746: EMPTY
17747: LIST
17748: LIST
17749: PUSH
17750: LD_INT 3
17752: PUSH
17753: LD_INT 2
17755: PUSH
17756: LD_INT 34
17758: PUSH
17759: LD_INT 12
17761: PUSH
17762: EMPTY
17763: LIST
17764: LIST
17765: PUSH
17766: LD_INT 34
17768: PUSH
17769: LD_INT 13
17771: PUSH
17772: EMPTY
17773: LIST
17774: LIST
17775: PUSH
17776: LD_INT 34
17778: PUSH
17779: LD_INT 32
17781: PUSH
17782: EMPTY
17783: LIST
17784: LIST
17785: PUSH
17786: LD_INT 34
17788: PUSH
17789: LD_INT 51
17791: PUSH
17792: EMPTY
17793: LIST
17794: LIST
17795: PUSH
17796: LD_INT 34
17798: PUSH
17799: LD_INT 52
17801: PUSH
17802: EMPTY
17803: LIST
17804: LIST
17805: PUSH
17806: EMPTY
17807: LIST
17808: LIST
17809: LIST
17810: LIST
17811: LIST
17812: LIST
17813: PUSH
17814: EMPTY
17815: LIST
17816: LIST
17817: LIST
17818: LIST
17819: PPUSH
17820: CALL_OW 69
17824: ST_TO_ADDR
// seznam := def_buildings ^ def_peoples ^ def_vehicles ;
17825: LD_ADDR_VAR 0 3
17829: PUSH
17830: LD_VAR 0 4
17834: PUSH
17835: LD_VAR 0 6
17839: ADD
17840: PUSH
17841: LD_VAR 0 5
17845: ADD
17846: ST_TO_ADDR
// result := seznam ;
17847: LD_ADDR_VAR 0 2
17851: PUSH
17852: LD_VAR 0 3
17856: ST_TO_ADDR
// end ;
17857: LD_VAR 0 2
17861: RET
// function start_defend ; var side ; begin
17862: LD_INT 0
17864: PPUSH
17865: PPUSH
// id_reg := [ ] ;
17866: LD_ADDR_LOC 12
17870: PUSH
17871: EMPTY
17872: ST_TO_ADDR
// id_def := [ ] ;
17873: LD_ADDR_LOC 13
17877: PUSH
17878: EMPTY
17879: ST_TO_ADDR
// for side = 1 to 8 do
17880: LD_ADDR_VAR 0 2
17884: PUSH
17885: DOUBLE
17886: LD_INT 1
17888: DEC
17889: ST_TO_ADDR
17890: LD_INT 8
17892: PUSH
17893: FOR_TO
17894: IFFALSE 18150
// if side in cpu_list then
17896: LD_VAR 0 2
17900: PUSH
17901: LD_EXP 8
17905: IN
17906: IFFALSE 18114
// begin id_reg := id_reg ^ McRegistry ( 1 , [ [ mc_reg_refresh_time , 0 0$1 ] , [ mc_reg_expire_stops_to_attack , 0 0$4 ] , [ mc_reg_area_to_guard , BaseArea [ side ] ] , [ mc_reg_area_to_protect , BaseArea [ side ] ] , [ mc_reg_units_to_protect , prepare_defend ( side ) ] , mc_reg_only_important , - mc_reg_ignore_fog ] ) ;
17908: LD_ADDR_LOC 12
17912: PUSH
17913: LD_LOC 12
17917: PUSH
17918: LD_INT 1
17920: PPUSH
17921: LD_INT 1
17923: PUSH
17924: LD_INT 35
17926: PUSH
17927: EMPTY
17928: LIST
17929: LIST
17930: PUSH
17931: LD_INT 5
17933: PUSH
17934: LD_INT 140
17936: PUSH
17937: EMPTY
17938: LIST
17939: LIST
17940: PUSH
17941: LD_INT 2
17943: PUSH
17944: LD_LOC 14
17948: PUSH
17949: LD_VAR 0 2
17953: ARRAY
17954: PUSH
17955: EMPTY
17956: LIST
17957: LIST
17958: PUSH
17959: LD_INT 3
17961: PUSH
17962: LD_LOC 14
17966: PUSH
17967: LD_VAR 0 2
17971: ARRAY
17972: PUSH
17973: EMPTY
17974: LIST
17975: LIST
17976: PUSH
17977: LD_INT 4
17979: PUSH
17980: LD_VAR 0 2
17984: PPUSH
17985: CALL 17611 0 1
17989: PUSH
17990: EMPTY
17991: LIST
17992: LIST
17993: PUSH
17994: LD_INT 8
17996: PUSH
17997: LD_INT 7
17999: NEG
18000: PUSH
18001: EMPTY
18002: LIST
18003: LIST
18004: LIST
18005: LIST
18006: LIST
18007: LIST
18008: LIST
18009: PPUSH
18010: CALL_OW 399
18014: ADD
18015: ST_TO_ADDR
// id_def := id_def ^ McDefend ( 200 , id_reg , prepare_defend ( side ) , [ [ mc_def_advantage , 5000 ] , [ mc_area_dont_leave , BaseArea [ side ] ] , [ mc_retreat_area_people , Heal [ side ] ] , [ mc_retreat_lives_people , 600 ] , ] ) ;
18016: LD_ADDR_LOC 13
18020: PUSH
18021: LD_LOC 13
18025: PUSH
18026: LD_INT 200
18028: PPUSH
18029: LD_LOC 12
18033: PPUSH
18034: LD_VAR 0 2
18038: PPUSH
18039: CALL 17611 0 1
18043: PPUSH
18044: LD_INT 1
18046: PUSH
18047: LD_INT 5000
18049: PUSH
18050: EMPTY
18051: LIST
18052: LIST
18053: PUSH
18054: LD_INT 2
18056: PUSH
18057: LD_LOC 14
18061: PUSH
18062: LD_VAR 0 2
18066: ARRAY
18067: PUSH
18068: EMPTY
18069: LIST
18070: LIST
18071: PUSH
18072: LD_INT 7
18074: PUSH
18075: LD_LOC 16
18079: PUSH
18080: LD_VAR 0 2
18084: ARRAY
18085: PUSH
18086: EMPTY
18087: LIST
18088: LIST
18089: PUSH
18090: LD_INT 5
18092: PUSH
18093: LD_INT 600
18095: PUSH
18096: EMPTY
18097: LIST
18098: LIST
18099: PUSH
18100: EMPTY
18101: LIST
18102: LIST
18103: LIST
18104: LIST
18105: PPUSH
18106: CALL_OW 401
18110: ADD
18111: ST_TO_ADDR
// end else
18112: GO 18148
// begin id_reg := id_reg ^ [ 0 ] ;
18114: LD_ADDR_LOC 12
18118: PUSH
18119: LD_LOC 12
18123: PUSH
18124: LD_INT 0
18126: PUSH
18127: EMPTY
18128: LIST
18129: ADD
18130: ST_TO_ADDR
// id_def := id_reg ^ [ 0 ] ;
18131: LD_ADDR_LOC 13
18135: PUSH
18136: LD_LOC 12
18140: PUSH
18141: LD_INT 0
18143: PUSH
18144: EMPTY
18145: LIST
18146: ADD
18147: ST_TO_ADDR
// end ;
18148: GO 17893
18150: POP
18151: POP
// end ;
18152: LD_VAR 0 1
18156: RET
// on McRegistryResultChanges ( mcid , n , s ) do var side ;
18157: LD_INT 0
18159: PPUSH
// begin for side = 1 to id_reg do
18160: LD_ADDR_VAR 0 4
18164: PUSH
18165: DOUBLE
18166: LD_INT 1
18168: DEC
18169: ST_TO_ADDR
18170: LD_LOC 12
18174: PUSH
18175: FOR_TO
18176: IFFALSE 18228
// if id_reg [ side ] = mcid then
18178: LD_LOC 12
18182: PUSH
18183: LD_VAR 0 4
18187: ARRAY
18188: PUSH
18189: LD_VAR 0 1
18193: EQUAL
18194: IFFALSE 18226
// begin AddMcUnits ( mcid , prepare_defend ( side ) ) ;
18196: LD_VAR 0 1
18200: PPUSH
18201: LD_VAR 0 4
18205: PPUSH
18206: CALL 17611 0 1
18210: PPUSH
18211: CALL_OW 390
// SendForces ( side ) ;
18215: LD_VAR 0 4
18219: PPUSH
18220: CALL 19373 0 1
// break ;
18224: GO 18228
// end ;
18226: GO 18175
18228: POP
18229: POP
// end ;
18230: PPOPN 4
18232: END
// every 0 0$7.7 do var side , list ;
18233: GO 18235
18235: DISABLE
18236: LD_INT 0
18238: PPUSH
18239: PPUSH
// begin list := [ ] ;
18240: LD_ADDR_VAR 0 2
18244: PUSH
18245: EMPTY
18246: ST_TO_ADDR
// for side = 1 to 8 do
18247: LD_ADDR_VAR 0 1
18251: PUSH
18252: DOUBLE
18253: LD_INT 1
18255: DEC
18256: ST_TO_ADDR
18257: LD_INT 8
18259: PUSH
18260: FOR_TO
18261: IFFALSE 18406
// if ( not side in cpu_list ) and id_reg [ side ] then
18263: LD_VAR 0 1
18267: PUSH
18268: LD_EXP 8
18272: IN
18273: NOT
18274: PUSH
18275: LD_LOC 12
18279: PUSH
18280: LD_VAR 0 1
18284: ARRAY
18285: AND
18286: IFFALSE 18404
// begin KillMc ( id_reg [ side ] ) ;
18288: LD_LOC 12
18292: PUSH
18293: LD_VAR 0 1
18297: ARRAY
18298: PPUSH
18299: CALL_OW 387
// id_reg := Delete ( id_reg , side ) ;
18303: LD_ADDR_LOC 12
18307: PUSH
18308: LD_LOC 12
18312: PPUSH
18313: LD_VAR 0 1
18317: PPUSH
18318: CALL_OW 3
18322: ST_TO_ADDR
// id_reg := Insert ( id_reg , side , 0 ) ;
18323: LD_ADDR_LOC 12
18327: PUSH
18328: LD_LOC 12
18332: PPUSH
18333: LD_VAR 0 1
18337: PPUSH
18338: LD_INT 0
18340: PPUSH
18341: CALL_OW 2
18345: ST_TO_ADDR
// KillMc ( id_def [ side ] ) ;
18346: LD_LOC 13
18350: PUSH
18351: LD_VAR 0 1
18355: ARRAY
18356: PPUSH
18357: CALL_OW 387
// id_def := Delete ( id_def , side ) ;
18361: LD_ADDR_LOC 13
18365: PUSH
18366: LD_LOC 13
18370: PPUSH
18371: LD_VAR 0 1
18375: PPUSH
18376: CALL_OW 3
18380: ST_TO_ADDR
// id_def := Insert ( id_def , side , 0 ) ;
18381: LD_ADDR_LOC 13
18385: PUSH
18386: LD_LOC 13
18390: PPUSH
18391: LD_VAR 0 1
18395: PPUSH
18396: LD_INT 0
18398: PPUSH
18399: CALL_OW 2
18403: ST_TO_ADDR
// end ;
18404: GO 18260
18406: POP
18407: POP
// enable ;
18408: ENABLE
// end ;
18409: PPOPN 2
18411: END
// every 0 0$5.3 do var side , sci , list , wounded , un ;
18412: GO 18414
18414: DISABLE
18415: LD_INT 0
18417: PPUSH
18418: PPUSH
18419: PPUSH
18420: PPUSH
18421: PPUSH
// begin for side = 1 to 8 do
18422: LD_ADDR_VAR 0 1
18426: PUSH
18427: DOUBLE
18428: LD_INT 1
18430: DEC
18431: ST_TO_ADDR
18432: LD_INT 8
18434: PUSH
18435: FOR_TO
18436: IFFALSE 18870
// if side in cpu_list then
18438: LD_VAR 0 1
18442: PUSH
18443: LD_EXP 8
18447: IN
18448: IFFALSE 18868
// begin wounded := FilterUnitsInArea ( Heal [ side ] , [ [ f_side , side ] , [ f_type , unit_human ] , f_not , [ f_lives , 1000 ] ] ) ;
18450: LD_ADDR_VAR 0 4
18454: PUSH
18455: LD_LOC 16
18459: PUSH
18460: LD_VAR 0 1
18464: ARRAY
18465: PPUSH
18466: LD_INT 22
18468: PUSH
18469: LD_VAR 0 1
18473: PUSH
18474: EMPTY
18475: LIST
18476: LIST
18477: PUSH
18478: LD_INT 21
18480: PUSH
18481: LD_INT 1
18483: PUSH
18484: EMPTY
18485: LIST
18486: LIST
18487: PUSH
18488: LD_INT 3
18490: PUSH
18491: LD_INT 24
18493: PUSH
18494: LD_INT 1000
18496: PUSH
18497: EMPTY
18498: LIST
18499: LIST
18500: PUSH
18501: EMPTY
18502: LIST
18503: LIST
18504: LIST
18505: LIST
18506: PPUSH
18507: CALL_OW 70
18511: ST_TO_ADDR
// if wounded then
18512: LD_VAR 0 4
18516: IFFALSE 18726
// begin if not docs [ side ] then
18518: LD_LOC 17
18522: PUSH
18523: LD_VAR 0 1
18527: ARRAY
18528: NOT
18529: IFFALSE 18693
// begin sci := request_people ( side , class_scientistic , 5 ) ;
18531: LD_ADDR_VAR 0 2
18535: PUSH
18536: LD_VAR 0 1
18540: PPUSH
18541: LD_INT 4
18543: PPUSH
18544: LD_INT 5
18546: PPUSH
18547: CALL 24656 0 3
18551: ST_TO_ADDR
// docs := Delete ( docs , side ) ;
18552: LD_ADDR_LOC 17
18556: PUSH
18557: LD_LOC 17
18561: PPUSH
18562: LD_VAR 0 1
18566: PPUSH
18567: CALL_OW 3
18571: ST_TO_ADDR
// docs := Insert ( docs , side , sci ) ;
18572: LD_ADDR_LOC 17
18576: PUSH
18577: LD_LOC 17
18581: PPUSH
18582: LD_VAR 0 1
18586: PPUSH
18587: LD_VAR 0 2
18591: PPUSH
18592: CALL_OW 2
18596: ST_TO_ADDR
// list := reserved_people [ side ] ^ sci ;
18597: LD_ADDR_VAR 0 3
18601: PUSH
18602: LD_EXP 68
18606: PUSH
18607: LD_VAR 0 1
18611: ARRAY
18612: PUSH
18613: LD_VAR 0 2
18617: ADD
18618: ST_TO_ADDR
// reserved_people := Delete ( reserved_people , side ) ;
18619: LD_ADDR_EXP 68
18623: PUSH
18624: LD_EXP 68
18628: PPUSH
18629: LD_VAR 0 1
18633: PPUSH
18634: CALL_OW 3
18638: ST_TO_ADDR
// reserved_people := Insert ( reserved_people , side , list ) ;
18639: LD_ADDR_EXP 68
18643: PUSH
18644: LD_EXP 68
18648: PPUSH
18649: LD_VAR 0 1
18653: PPUSH
18654: LD_VAR 0 3
18658: PPUSH
18659: CALL_OW 2
18663: ST_TO_ADDR
// ComRemember ( sci ) ;
18664: LD_VAR 0 2
18668: PPUSH
18669: CALL_OW 143
// ComMoveToArea ( sci , Heal [ side ] ) ;
18673: LD_VAR 0 2
18677: PPUSH
18678: LD_LOC 16
18682: PUSH
18683: LD_VAR 0 1
18687: ARRAY
18688: PPUSH
18689: CALL_OW 113
// end ; for un in wounded do
18693: LD_ADDR_VAR 0 5
18697: PUSH
18698: LD_VAR 0 4
18702: PUSH
18703: FOR_IN
18704: IFFALSE 18722
// AddComHeal ( sci , un ) ;
18706: LD_VAR 0 2
18710: PPUSH
18711: LD_VAR 0 5
18715: PPUSH
18716: CALL_OW 188
18720: GO 18703
18722: POP
18723: POP
// end else
18724: GO 18868
// if docs [ side ] then
18726: LD_LOC 17
18730: PUSH
18731: LD_VAR 0 1
18735: ARRAY
18736: IFFALSE 18868
// begin list := reserved_people [ side ] diff docs [ side ] ;
18738: LD_ADDR_VAR 0 3
18742: PUSH
18743: LD_EXP 68
18747: PUSH
18748: LD_VAR 0 1
18752: ARRAY
18753: PUSH
18754: LD_LOC 17
18758: PUSH
18759: LD_VAR 0 1
18763: ARRAY
18764: DIFF
18765: ST_TO_ADDR
// reserved_people := Delete ( reserved_people , side ) ;
18766: LD_ADDR_EXP 68
18770: PUSH
18771: LD_EXP 68
18775: PPUSH
18776: LD_VAR 0 1
18780: PPUSH
18781: CALL_OW 3
18785: ST_TO_ADDR
// reserved_people := Insert ( reserved_people , side , list ) ;
18786: LD_ADDR_EXP 68
18790: PUSH
18791: LD_EXP 68
18795: PPUSH
18796: LD_VAR 0 1
18800: PPUSH
18801: LD_VAR 0 3
18805: PPUSH
18806: CALL_OW 2
18810: ST_TO_ADDR
// ComReturn ( docs [ side ] ) ;
18811: LD_LOC 17
18815: PUSH
18816: LD_VAR 0 1
18820: ARRAY
18821: PPUSH
18822: CALL_OW 144
// docs := Delete ( docs , side ) ;
18826: LD_ADDR_LOC 17
18830: PUSH
18831: LD_LOC 17
18835: PPUSH
18836: LD_VAR 0 1
18840: PPUSH
18841: CALL_OW 3
18845: ST_TO_ADDR
// docs := Insert ( docs , side , [ ] ) ;
18846: LD_ADDR_LOC 17
18850: PUSH
18851: LD_LOC 17
18855: PPUSH
18856: LD_VAR 0 1
18860: PPUSH
18861: EMPTY
18862: PPUSH
18863: CALL_OW 2
18867: ST_TO_ADDR
// end ; end ;
18868: GO 18435
18870: POP
18871: POP
// enable ;
18872: ENABLE
// end ;
18873: PPOPN 5
18875: END
// every 0 0$3.1 do var list , self ;
18876: GO 18878
18878: DISABLE
18879: LD_INT 0
18881: PPUSH
18882: PPUSH
// begin list := FilterUnitsInArea ( ar_base , [ [ f_side , you ] , [ f_ok ] ] ) ;
18883: LD_ADDR_VAR 0 1
18887: PUSH
18888: LD_INT 13
18890: PPUSH
18891: LD_INT 22
18893: PUSH
18894: LD_EXP 1
18898: PUSH
18899: EMPTY
18900: LIST
18901: LIST
18902: PUSH
18903: LD_INT 50
18905: PUSH
18906: EMPTY
18907: LIST
18908: PUSH
18909: EMPTY
18910: LIST
18911: LIST
18912: PPUSH
18913: CALL_OW 70
18917: ST_TO_ADDR
// if list then
18918: LD_VAR 0 1
18922: IFFALSE 19019
// begin self := FilterAllUnits ( [ [ f_side , ar ] , [ f_type , unit_vehicle ] , [ f_weapon , ar_selfpropelled_bomb ] ] ) ;
18924: LD_ADDR_VAR 0 2
18928: PUSH
18929: LD_INT 22
18931: PUSH
18932: LD_EXP 4
18936: PUSH
18937: EMPTY
18938: LIST
18939: LIST
18940: PUSH
18941: LD_INT 21
18943: PUSH
18944: LD_INT 2
18946: PUSH
18947: EMPTY
18948: LIST
18949: LIST
18950: PUSH
18951: LD_INT 34
18953: PUSH
18954: LD_INT 29
18956: PUSH
18957: EMPTY
18958: LIST
18959: LIST
18960: PUSH
18961: EMPTY
18962: LIST
18963: LIST
18964: LIST
18965: PPUSH
18966: CALL_OW 69
18970: ST_TO_ADDR
// if self then
18971: LD_VAR 0 2
18975: IFFALSE 18993
// self := self [ 1 ] else
18977: LD_ADDR_VAR 0 2
18981: PUSH
18982: LD_VAR 0 2
18986: PUSH
18987: LD_INT 1
18989: ARRAY
18990: ST_TO_ADDR
18991: GO 18995
// exit ;
18993: GO 19020
// ComAttackUnit ( self , NearestUnitToUnit ( list , self ) ) ;
18995: LD_VAR 0 2
18999: PPUSH
19000: LD_VAR 0 1
19004: PPUSH
19005: LD_VAR 0 2
19009: PPUSH
19010: CALL_OW 74
19014: PPUSH
19015: CALL_OW 115
// ; end ; enable ;
19019: ENABLE
// end ;
19020: PPOPN 2
19022: END
// every 0 0$3 do var side , list ;
19023: GO 19025
19025: DISABLE
19026: LD_INT 0
19028: PPUSH
19029: PPUSH
// begin for side in cpu_list do
19030: LD_ADDR_VAR 0 1
19034: PUSH
19035: LD_EXP 8
19039: PUSH
19040: FOR_IN
19041: IFFALSE 19130
// if side then
19043: LD_VAR 0 1
19047: IFFALSE 19128
// begin list := FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_human ] , f_not , [ f_lives , 800 ] ] ) diff healing_un ;
19049: LD_ADDR_VAR 0 2
19053: PUSH
19054: LD_INT 22
19056: PUSH
19057: LD_VAR 0 1
19061: PUSH
19062: EMPTY
19063: LIST
19064: LIST
19065: PUSH
19066: LD_INT 21
19068: PUSH
19069: LD_INT 1
19071: PUSH
19072: EMPTY
19073: LIST
19074: LIST
19075: PUSH
19076: LD_INT 3
19078: PUSH
19079: LD_INT 24
19081: PUSH
19082: LD_INT 800
19084: PUSH
19085: EMPTY
19086: LIST
19087: LIST
19088: PUSH
19089: EMPTY
19090: LIST
19091: LIST
19092: LIST
19093: LIST
19094: PPUSH
19095: CALL_OW 69
19099: PUSH
19100: LD_LOC 18
19104: DIFF
19105: ST_TO_ADDR
// if list then
19106: LD_VAR 0 2
19110: IFFALSE 19128
// wounded_un := wounded_un ^ list ;
19112: LD_ADDR_LOC 19
19116: PUSH
19117: LD_LOC 19
19121: PUSH
19122: LD_VAR 0 2
19126: ADD
19127: ST_TO_ADDR
// end ;
19128: GO 19040
19130: POP
19131: POP
// enable ;
19132: ENABLE
// end ;
19133: PPOPN 2
19135: END
// every 0 0$2 do var list , un ;
19136: GO 19138
19138: DISABLE
19139: LD_INT 0
19141: PPUSH
19142: PPUSH
// begin for un in wounded_un do
19143: LD_ADDR_VAR 0 2
19147: PUSH
19148: LD_LOC 19
19152: PUSH
19153: FOR_IN
19154: IFFALSE 19240
// if not ( un in healing_un ) then
19156: LD_VAR 0 2
19160: PUSH
19161: LD_LOC 18
19165: IN
19166: NOT
19167: IFFALSE 19238
// begin healing_un := healing_un ^ un ;
19169: LD_ADDR_LOC 18
19173: PUSH
19174: LD_LOC 18
19178: PUSH
19179: LD_VAR 0 2
19183: ADD
19184: ST_TO_ADDR
// McCustom ( 100 , un ) ;
19185: LD_INT 100
19187: PPUSH
19188: LD_VAR 0 2
19192: PPUSH
19193: CALL_OW 416
// ComMoveToArea ( un , Heal [ GetSide ( un ) ] ) ;
19197: LD_VAR 0 2
19201: PPUSH
19202: LD_LOC 16
19206: PUSH
19207: LD_VAR 0 2
19211: PPUSH
19212: CALL_OW 255
19216: ARRAY
19217: PPUSH
19218: CALL_OW 113
// wounded_un := wounded_un diff un ;
19222: LD_ADDR_LOC 19
19226: PUSH
19227: LD_LOC 19
19231: PUSH
19232: LD_VAR 0 2
19236: DIFF
19237: ST_TO_ADDR
// end ;
19238: GO 19153
19240: POP
19241: POP
// enable ;
19242: ENABLE
// end ;
19243: PPOPN 2
19245: END
// every 0 0$2 + 0 0$1 do var un ;
19246: GO 19248
19248: DISABLE
19249: LD_INT 0
19251: PPUSH
// begin for un in healing_un do
19252: LD_ADDR_VAR 0 1
19256: PUSH
19257: LD_LOC 18
19261: PUSH
19262: FOR_IN
19263: IFFALSE 19367
// if GetLives ( un ) = 1000 then
19265: LD_VAR 0 1
19269: PPUSH
19270: CALL_OW 256
19274: PUSH
19275: LD_INT 1000
19277: EQUAL
19278: IFFALSE 19312
// begin KillMc ( GetUnitMc ( un ) ) ;
19280: LD_VAR 0 1
19284: PPUSH
19285: CALL_OW 388
19289: PPUSH
19290: CALL_OW 387
// healing_un := healing_un diff un ;
19294: LD_ADDR_LOC 18
19298: PUSH
19299: LD_LOC 18
19303: PUSH
19304: LD_VAR 0 1
19308: DIFF
19309: ST_TO_ADDR
// end else
19310: GO 19365
// if not IsInArea ( un , Heal [ GetSide ( un ) ] ) then
19312: LD_VAR 0 1
19316: PPUSH
19317: LD_LOC 16
19321: PUSH
19322: LD_VAR 0 1
19326: PPUSH
19327: CALL_OW 255
19331: ARRAY
19332: PPUSH
19333: CALL_OW 308
19337: NOT
19338: IFFALSE 19365
// ComMoveToArea ( un , Heal [ GetSide ( un ) ] ) ;
19340: LD_VAR 0 1
19344: PPUSH
19345: LD_LOC 16
19349: PUSH
19350: LD_VAR 0 1
19354: PPUSH
19355: CALL_OW 255
19359: ARRAY
19360: PPUSH
19361: CALL_OW 113
19365: GO 19262
19367: POP
19368: POP
// enable ;
19369: ENABLE
// end ;
19370: PPOPN 1
19372: END
// function SendForces ( side ) ; var un , list , target , mcid ; begin
19373: LD_INT 0
19375: PPUSH
19376: PPUSH
19377: PPUSH
19378: PPUSH
19379: PPUSH
// ComRemember ( defend_forces [ side ] ) ;
19380: LD_EXP 66
19384: PUSH
19385: LD_VAR 0 1
19389: ARRAY
19390: PPUSH
19391: CALL_OW 143
// mcid := McCustom ( 500 , defend_forces [ side ] ) ;
19395: LD_ADDR_VAR 0 6
19399: PUSH
19400: LD_INT 500
19402: PPUSH
19403: LD_EXP 66
19407: PUSH
19408: LD_VAR 0 1
19412: ARRAY
19413: PPUSH
19414: CALL_OW 416
19418: ST_TO_ADDR
// wait ( 1 ) ;
19419: LD_INT 1
19421: PPUSH
19422: CALL_OW 67
// repeat list := FilterUnitsInArea ( DefendArea [ side ] , [ [ f_side , you ] , [ f_ok ] ] ) ;
19426: LD_ADDR_VAR 0 4
19430: PUSH
19431: LD_LOC 15
19435: PUSH
19436: LD_VAR 0 1
19440: ARRAY
19441: PPUSH
19442: LD_INT 22
19444: PUSH
19445: LD_EXP 1
19449: PUSH
19450: EMPTY
19451: LIST
19452: LIST
19453: PUSH
19454: LD_INT 50
19456: PUSH
19457: EMPTY
19458: LIST
19459: PUSH
19460: EMPTY
19461: LIST
19462: LIST
19463: PPUSH
19464: CALL_OW 70
19468: ST_TO_ADDR
// target := NearestUnitToXY ( list , central_base [ side ] [ 1 ] , central_base [ side ] [ 2 ] ) ;
19469: LD_ADDR_VAR 0 5
19473: PUSH
19474: LD_VAR 0 4
19478: PPUSH
19479: LD_LOC 20
19483: PUSH
19484: LD_VAR 0 1
19488: ARRAY
19489: PUSH
19490: LD_INT 1
19492: ARRAY
19493: PPUSH
19494: LD_LOC 20
19498: PUSH
19499: LD_VAR 0 1
19503: ARRAY
19504: PUSH
19505: LD_INT 2
19507: ARRAY
19508: PPUSH
19509: CALL_OW 73
19513: ST_TO_ADDR
// for un in list do
19514: LD_ADDR_VAR 0 3
19518: PUSH
19519: LD_VAR 0 4
19523: PUSH
19524: FOR_IN
19525: IFFALSE 19616
// if GetWeapon ( un ) in [ us_rocket_launcher , ar_rocket_launcher , ru_rocket_launcher , ru_rocket ] then
19527: LD_VAR 0 3
19531: PPUSH
19532: CALL_OW 264
19536: PUSH
19537: LD_INT 7
19539: PUSH
19540: LD_INT 28
19542: PUSH
19543: LD_INT 45
19545: PUSH
19546: LD_INT 47
19548: PUSH
19549: EMPTY
19550: LIST
19551: LIST
19552: LIST
19553: LIST
19554: IN
19555: IFFALSE 19594
// ComAttackPlace ( defend_forces [ side ] , GetX ( target ) , GetY ( target ) ) else
19557: LD_EXP 66
19561: PUSH
19562: LD_VAR 0 1
19566: ARRAY
19567: PPUSH
19568: LD_VAR 0 5
19572: PPUSH
19573: CALL_OW 250
19577: PPUSH
19578: LD_VAR 0 5
19582: PPUSH
19583: CALL_OW 251
19587: PPUSH
19588: CALL_OW 116
19592: GO 19614
// ComAttackUnit ( defend_forces [ side ] , target ) ;
19594: LD_EXP 66
19598: PUSH
19599: LD_VAR 0 1
19603: ARRAY
19604: PPUSH
19605: LD_VAR 0 5
19609: PPUSH
19610: CALL_OW 115
19614: GO 19524
19616: POP
19617: POP
// wait ( 50 ) ;
19618: LD_INT 50
19620: PPUSH
19621: CALL_OW 67
// until not list ;
19625: LD_VAR 0 4
19629: NOT
19630: IFFALSE 19426
// KillMc ( mcid ) ;
19632: LD_VAR 0 6
19636: PPUSH
19637: CALL_OW 387
// wait ( 2 ) ;
19641: LD_INT 2
19643: PPUSH
19644: CALL_OW 67
// ComReturn ( defend_forces [ side ] ) ;
19648: LD_EXP 66
19652: PUSH
19653: LD_VAR 0 1
19657: ARRAY
19658: PPUSH
19659: CALL_OW 144
// end ;
19663: LD_VAR 0 2
19667: RET
// every 0 0$5.1 do var side ;
19668: GO 19670
19670: DISABLE
19671: LD_INT 0
19673: PPUSH
// begin for side = 1 to 3 do
19674: LD_ADDR_VAR 0 1
19678: PUSH
19679: DOUBLE
19680: LD_INT 1
19682: DEC
19683: ST_TO_ADDR
19684: LD_INT 3
19686: PUSH
19687: FOR_TO
19688: IFFALSE 19765
// if ( not defend_forces [ side ] ) and ready_forces [ side ] then
19690: LD_EXP 66
19694: PUSH
19695: LD_VAR 0 1
19699: ARRAY
19700: NOT
19701: PUSH
19702: LD_EXP 63
19706: PUSH
19707: LD_VAR 0 1
19711: ARRAY
19712: AND
19713: IFFALSE 19763
// begin Replace ( defend_forces , side , ready_forces [ side ] ) ;
19715: LD_EXP 66
19719: PPUSH
19720: LD_VAR 0 1
19724: PPUSH
19725: LD_EXP 63
19729: PUSH
19730: LD_VAR 0 1
19734: ARRAY
19735: PPUSH
19736: CALL_OW 1
// Replace ( ready_forces , side , [ ] ) ;
19740: LD_EXP 63
19744: PPUSH
19745: LD_VAR 0 1
19749: PPUSH
19750: EMPTY
19751: PPUSH
19752: CALL_OW 1
// wait ( 2 ) ;
19756: LD_INT 2
19758: PPUSH
19759: CALL_OW 67
// end ;
19763: GO 19687
19765: POP
19766: POP
// enable ;
19767: ENABLE
// end ;
19768: PPOPN 1
19770: END
// export function Update_defend ( un ) ; var side ; begin
19771: LD_INT 0
19773: PPUSH
19774: PPUSH
// if GetSide ( un ) = you then
19775: LD_VAR 0 1
19779: PPUSH
19780: CALL_OW 255
19784: PUSH
19785: LD_EXP 1
19789: EQUAL
19790: IFFALSE 19794
// exit ;
19792: GO 19863
// for side = 1 to 3 do
19794: LD_ADDR_VAR 0 3
19798: PUSH
19799: DOUBLE
19800: LD_INT 1
19802: DEC
19803: ST_TO_ADDR
19804: LD_INT 3
19806: PUSH
19807: FOR_TO
19808: IFFALSE 19861
// if un in defend_forces [ side ] then
19810: LD_VAR 0 1
19814: PUSH
19815: LD_EXP 66
19819: PUSH
19820: LD_VAR 0 3
19824: ARRAY
19825: IN
19826: IFFALSE 19859
// Replace ( defend_forces , side , defend_forces [ side ] diff un ) ;
19828: LD_EXP 66
19832: PPUSH
19833: LD_VAR 0 3
19837: PPUSH
19838: LD_EXP 66
19842: PUSH
19843: LD_VAR 0 3
19847: ARRAY
19848: PUSH
19849: LD_VAR 0 1
19853: DIFF
19854: PPUSH
19855: CALL_OW 1
19859: GO 19807
19861: POP
19862: POP
// end ; end_of_file
19863: LD_VAR 0 2
19867: RET
// export ready_forces , attack_forces , retreat_forces , defend_forces ; var us_ru , us_ar , ru_us , ru_ar ; var last_ar_attack , attack_timing , attack_limit ; var al_eliminate ; export function init_attack ; var side ; begin
19868: LD_INT 0
19870: PPUSH
19871: PPUSH
// ready_forces = [ ] ;
19872: LD_ADDR_EXP 63
19876: PUSH
19877: EMPTY
19878: ST_TO_ADDR
// attack_forces = [ ] ;
19879: LD_ADDR_EXP 64
19883: PUSH
19884: EMPTY
19885: ST_TO_ADDR
// retreat_forces = [ ] ;
19886: LD_ADDR_EXP 65
19890: PUSH
19891: EMPTY
19892: ST_TO_ADDR
// defend_forces = [ ] ;
19893: LD_ADDR_EXP 66
19897: PUSH
19898: EMPTY
19899: ST_TO_ADDR
// for side = 1 to 8 do
19900: LD_ADDR_VAR 0 2
19904: PUSH
19905: DOUBLE
19906: LD_INT 1
19908: DEC
19909: ST_TO_ADDR
19910: LD_INT 8
19912: PUSH
19913: FOR_TO
19914: IFFALSE 19982
// begin ready_forces = ready_forces ^ [ [ ] ] ;
19916: LD_ADDR_EXP 63
19920: PUSH
19921: LD_EXP 63
19925: PUSH
19926: EMPTY
19927: PUSH
19928: EMPTY
19929: LIST
19930: ADD
19931: ST_TO_ADDR
// attack_forces = attack_forces ^ [ [ ] ] ;
19932: LD_ADDR_EXP 64
19936: PUSH
19937: LD_EXP 64
19941: PUSH
19942: EMPTY
19943: PUSH
19944: EMPTY
19945: LIST
19946: ADD
19947: ST_TO_ADDR
// retreat_forces = retreat_forces ^ [ [ ] ] ;
19948: LD_ADDR_EXP 65
19952: PUSH
19953: LD_EXP 65
19957: PUSH
19958: EMPTY
19959: PUSH
19960: EMPTY
19961: LIST
19962: ADD
19963: ST_TO_ADDR
// defend_forces = defend_forces ^ [ [ ] ] ;
19964: LD_ADDR_EXP 66
19968: PUSH
19969: LD_EXP 66
19973: PUSH
19974: EMPTY
19975: PUSH
19976: EMPTY
19977: LIST
19978: ADD
19979: ST_TO_ADDR
// end ;
19980: GO 19913
19982: POP
19983: POP
// us_ru := [ [ 76 , 61 ] , [ 121 , 55 ] , [ 171 , 59 ] , [ 190 , 90 ] ] ;
19984: LD_ADDR_LOC 21
19988: PUSH
19989: LD_INT 76
19991: PUSH
19992: LD_INT 61
19994: PUSH
19995: EMPTY
19996: LIST
19997: LIST
19998: PUSH
19999: LD_INT 121
20001: PUSH
20002: LD_INT 55
20004: PUSH
20005: EMPTY
20006: LIST
20007: LIST
20008: PUSH
20009: LD_INT 171
20011: PUSH
20012: LD_INT 59
20014: PUSH
20015: EMPTY
20016: LIST
20017: LIST
20018: PUSH
20019: LD_INT 190
20021: PUSH
20022: LD_INT 90
20024: PUSH
20025: EMPTY
20026: LIST
20027: LIST
20028: PUSH
20029: EMPTY
20030: LIST
20031: LIST
20032: LIST
20033: LIST
20034: ST_TO_ADDR
// us_ar := [ [ [ 78 , 69 ] , [ 121 , 116 ] , [ 155 , 137 ] , [ 190 , 170 ] , [ 242 , 187 ] ] , [ [ 72 , 106 ] , [ 111 , 176 ] , [ 163 , 184 ] , [ 215 , 191 ] , [ 242 , 187 ] ] ] ;
20035: LD_ADDR_LOC 22
20039: PUSH
20040: LD_INT 78
20042: PUSH
20043: LD_INT 69
20045: PUSH
20046: EMPTY
20047: LIST
20048: LIST
20049: PUSH
20050: LD_INT 121
20052: PUSH
20053: LD_INT 116
20055: PUSH
20056: EMPTY
20057: LIST
20058: LIST
20059: PUSH
20060: LD_INT 155
20062: PUSH
20063: LD_INT 137
20065: PUSH
20066: EMPTY
20067: LIST
20068: LIST
20069: PUSH
20070: LD_INT 190
20072: PUSH
20073: LD_INT 170
20075: PUSH
20076: EMPTY
20077: LIST
20078: LIST
20079: PUSH
20080: LD_INT 242
20082: PUSH
20083: LD_INT 187
20085: PUSH
20086: EMPTY
20087: LIST
20088: LIST
20089: PUSH
20090: EMPTY
20091: LIST
20092: LIST
20093: LIST
20094: LIST
20095: LIST
20096: PUSH
20097: LD_INT 72
20099: PUSH
20100: LD_INT 106
20102: PUSH
20103: EMPTY
20104: LIST
20105: LIST
20106: PUSH
20107: LD_INT 111
20109: PUSH
20110: LD_INT 176
20112: PUSH
20113: EMPTY
20114: LIST
20115: LIST
20116: PUSH
20117: LD_INT 163
20119: PUSH
20120: LD_INT 184
20122: PUSH
20123: EMPTY
20124: LIST
20125: LIST
20126: PUSH
20127: LD_INT 215
20129: PUSH
20130: LD_INT 191
20132: PUSH
20133: EMPTY
20134: LIST
20135: LIST
20136: PUSH
20137: LD_INT 242
20139: PUSH
20140: LD_INT 187
20142: PUSH
20143: EMPTY
20144: LIST
20145: LIST
20146: PUSH
20147: EMPTY
20148: LIST
20149: LIST
20150: LIST
20151: LIST
20152: LIST
20153: PUSH
20154: EMPTY
20155: LIST
20156: LIST
20157: ST_TO_ADDR
// ru_us := [ [ 118 , 63 ] , [ 78 , 57 ] , [ 30 , 44 ] , [ 56 , 83 ] ] ;
20158: LD_ADDR_LOC 23
20162: PUSH
20163: LD_INT 118
20165: PUSH
20166: LD_INT 63
20168: PUSH
20169: EMPTY
20170: LIST
20171: LIST
20172: PUSH
20173: LD_INT 78
20175: PUSH
20176: LD_INT 57
20178: PUSH
20179: EMPTY
20180: LIST
20181: LIST
20182: PUSH
20183: LD_INT 30
20185: PUSH
20186: LD_INT 44
20188: PUSH
20189: EMPTY
20190: LIST
20191: LIST
20192: PUSH
20193: LD_INT 56
20195: PUSH
20196: LD_INT 83
20198: PUSH
20199: EMPTY
20200: LIST
20201: LIST
20202: PUSH
20203: EMPTY
20204: LIST
20205: LIST
20206: LIST
20207: LIST
20208: ST_TO_ADDR
// ru_ar := [ [ [ 142 , 65 ] , [ 160 , 140 ] , [ 255 , 196 ] ] , [ [ 125 , 58 ] , [ 106 , 93 ] , [ 126 , 154 ] , [ 121 , 182 ] , [ 167 , 180 ] , [ 251 , 187 ] ] ] ;
20209: LD_ADDR_LOC 24
20213: PUSH
20214: LD_INT 142
20216: PUSH
20217: LD_INT 65
20219: PUSH
20220: EMPTY
20221: LIST
20222: LIST
20223: PUSH
20224: LD_INT 160
20226: PUSH
20227: LD_INT 140
20229: PUSH
20230: EMPTY
20231: LIST
20232: LIST
20233: PUSH
20234: LD_INT 255
20236: PUSH
20237: LD_INT 196
20239: PUSH
20240: EMPTY
20241: LIST
20242: LIST
20243: PUSH
20244: EMPTY
20245: LIST
20246: LIST
20247: LIST
20248: PUSH
20249: LD_INT 125
20251: PUSH
20252: LD_INT 58
20254: PUSH
20255: EMPTY
20256: LIST
20257: LIST
20258: PUSH
20259: LD_INT 106
20261: PUSH
20262: LD_INT 93
20264: PUSH
20265: EMPTY
20266: LIST
20267: LIST
20268: PUSH
20269: LD_INT 126
20271: PUSH
20272: LD_INT 154
20274: PUSH
20275: EMPTY
20276: LIST
20277: LIST
20278: PUSH
20279: LD_INT 121
20281: PUSH
20282: LD_INT 182
20284: PUSH
20285: EMPTY
20286: LIST
20287: LIST
20288: PUSH
20289: LD_INT 167
20291: PUSH
20292: LD_INT 180
20294: PUSH
20295: EMPTY
20296: LIST
20297: LIST
20298: PUSH
20299: LD_INT 251
20301: PUSH
20302: LD_INT 187
20304: PUSH
20305: EMPTY
20306: LIST
20307: LIST
20308: PUSH
20309: EMPTY
20310: LIST
20311: LIST
20312: LIST
20313: LIST
20314: LIST
20315: LIST
20316: PUSH
20317: EMPTY
20318: LIST
20319: LIST
20320: ST_TO_ADDR
// al_eliminate = [ [ 88 , 53 ] , [ 49 , 10 ] , [ 83 , 13 ] ] ;
20321: LD_ADDR_LOC 28
20325: PUSH
20326: LD_INT 88
20328: PUSH
20329: LD_INT 53
20331: PUSH
20332: EMPTY
20333: LIST
20334: LIST
20335: PUSH
20336: LD_INT 49
20338: PUSH
20339: LD_INT 10
20341: PUSH
20342: EMPTY
20343: LIST
20344: LIST
20345: PUSH
20346: LD_INT 83
20348: PUSH
20349: LD_INT 13
20351: PUSH
20352: EMPTY
20353: LIST
20354: LIST
20355: PUSH
20356: EMPTY
20357: LIST
20358: LIST
20359: LIST
20360: ST_TO_ADDR
// attack_timing = [ 50 , 40 , 30 ] [ difficulty ] ;
20361: LD_ADDR_LOC 26
20365: PUSH
20366: LD_INT 50
20368: PUSH
20369: LD_INT 40
20371: PUSH
20372: LD_INT 30
20374: PUSH
20375: EMPTY
20376: LIST
20377: LIST
20378: LIST
20379: PUSH
20380: LD_OWVAR 67
20384: ARRAY
20385: ST_TO_ADDR
// attack_limit = 0 ;
20386: LD_ADDR_LOC 27
20390: PUSH
20391: LD_INT 0
20393: ST_TO_ADDR
// last_ar_attack = TICK ;
20394: LD_ADDR_LOC 25
20398: PUSH
20399: LD_OWVAR 1
20403: ST_TO_ADDR
// end ;
20404: LD_VAR 0 1
20408: RET
// every 0 0$15.4 do var active_side , num_forces ;
20409: GO 20411
20411: DISABLE
20412: LD_INT 0
20414: PPUSH
20415: PPUSH
// begin num_forces := define_forces_strenght ;
20416: LD_ADDR_VAR 0 2
20420: PUSH
20421: CALL 20481 0 0
20425: ST_TO_ADDR
// for active_side in cpu_list do
20426: LD_ADDR_VAR 0 1
20430: PUSH
20431: LD_EXP 8
20435: PUSH
20436: FOR_IN
20437: IFFALSE 20475
// if ready_forces [ active_side ] >= num_forces then
20439: LD_EXP 63
20443: PUSH
20444: LD_VAR 0 1
20448: ARRAY
20449: PUSH
20450: LD_VAR 0 2
20454: GREATEREQUAL
20455: IFFALSE 20473
// begin let_the_war_begin ( active_side ) ;
20457: LD_VAR 0 1
20461: PPUSH
20462: CALL 21944 0 1
// wait ( 1 ) ;
20466: LD_INT 1
20468: PPUSH
20469: CALL_OW 67
// end ;
20473: GO 20436
20475: POP
20476: POP
// enable ;
20477: ENABLE
// end ;
20478: PPOPN 2
20480: END
// function define_forces_strenght ; var num ; begin
20481: LD_INT 0
20483: PPUSH
20484: PPUSH
// num := 3 ;
20485: LD_ADDR_VAR 0 2
20489: PUSH
20490: LD_INT 3
20492: ST_TO_ADDR
// if TICK > 7 7$0 then
20493: LD_OWVAR 1
20497: PUSH
20498: LD_INT 14700
20500: GREATER
20501: IFFALSE 20511
// num := 4 ;
20503: LD_ADDR_VAR 0 2
20507: PUSH
20508: LD_INT 4
20510: ST_TO_ADDR
// if TICK > 14 14$0 then
20511: LD_OWVAR 1
20515: PUSH
20516: LD_INT 29400
20518: GREATER
20519: IFFALSE 20529
// num := 6 ;
20521: LD_ADDR_VAR 0 2
20525: PUSH
20526: LD_INT 6
20528: ST_TO_ADDR
// result := num ;
20529: LD_ADDR_VAR 0 1
20533: PUSH
20534: LD_VAR 0 2
20538: ST_TO_ADDR
// end ;
20539: LD_VAR 0 1
20543: RET
// function define_target_priority ; var target ; begin
20544: LD_INT 0
20546: PPUSH
20547: PPUSH
// target := Rand ( 0 , attack_timing ) ;
20548: LD_ADDR_VAR 0 2
20552: PUSH
20553: LD_INT 0
20555: PPUSH
20556: LD_LOC 26
20560: PPUSH
20561: CALL_OW 12
20565: ST_TO_ADDR
// if target > attack_limit then
20566: LD_VAR 0 2
20570: PUSH
20571: LD_LOC 27
20575: GREATER
20576: IFFALSE 20588
// target := false else
20578: LD_ADDR_VAR 0 2
20582: PUSH
20583: LD_INT 0
20585: ST_TO_ADDR
20586: GO 20596
// target := true ;
20588: LD_ADDR_VAR 0 2
20592: PUSH
20593: LD_INT 1
20595: ST_TO_ADDR
// result := target ;
20596: LD_ADDR_VAR 0 1
20600: PUSH
20601: LD_VAR 0 2
20605: ST_TO_ADDR
// end ;
20606: LD_VAR 0 1
20610: RET
// every 1 1$0 trigger attack_timing > attack_limit do
20611: LD_LOC 26
20615: PUSH
20616: LD_LOC 27
20620: GREATER
20621: IFFALSE 20655
20623: GO 20625
20625: DISABLE
// begin attack_timing := attack_timing - 1 ;
20626: LD_ADDR_LOC 26
20630: PUSH
20631: LD_LOC 26
20635: PUSH
20636: LD_INT 1
20638: MINUS
20639: ST_TO_ADDR
// attack_limit := attack_limit + 1 ;
20640: LD_ADDR_LOC 27
20644: PUSH
20645: LD_LOC 27
20649: PUSH
20650: LD_INT 1
20652: PLUS
20653: ST_TO_ADDR
// enable ;
20654: ENABLE
// end ;
20655: END
// function Select_Weakest_Base ( areas ) ; var selected , un , list ; begin
20656: LD_INT 0
20658: PPUSH
20659: PPUSH
20660: PPUSH
20661: PPUSH
// selected := false ;
20662: LD_ADDR_VAR 0 3
20666: PUSH
20667: LD_INT 0
20669: ST_TO_ADDR
// for un in areas do
20670: LD_ADDR_VAR 0 4
20674: PUSH
20675: LD_VAR 0 1
20679: PUSH
20680: FOR_IN
20681: IFFALSE 20808
// begin list := FilterUnitsInArea ( un , [ [ f_side , you ] , [ f_type , unit_building ] , [ f_or , [ f_btype , b_turret ] , [ f_btype , b_bunker ] ] ] ) ;
20683: LD_ADDR_VAR 0 5
20687: PUSH
20688: LD_VAR 0 4
20692: PPUSH
20693: LD_INT 22
20695: PUSH
20696: LD_EXP 1
20700: PUSH
20701: EMPTY
20702: LIST
20703: LIST
20704: PUSH
20705: LD_INT 21
20707: PUSH
20708: LD_INT 3
20710: PUSH
20711: EMPTY
20712: LIST
20713: LIST
20714: PUSH
20715: LD_INT 2
20717: PUSH
20718: LD_INT 30
20720: PUSH
20721: LD_INT 33
20723: PUSH
20724: EMPTY
20725: LIST
20726: LIST
20727: PUSH
20728: LD_INT 30
20730: PUSH
20731: LD_INT 32
20733: PUSH
20734: EMPTY
20735: LIST
20736: LIST
20737: PUSH
20738: EMPTY
20739: LIST
20740: LIST
20741: LIST
20742: PUSH
20743: EMPTY
20744: LIST
20745: LIST
20746: LIST
20747: PPUSH
20748: CALL_OW 70
20752: ST_TO_ADDR
// if ( not selected ) or ( selected [ 1 ] < list ) then
20753: LD_VAR 0 3
20757: NOT
20758: PUSH
20759: LD_VAR 0 3
20763: PUSH
20764: LD_INT 1
20766: ARRAY
20767: PUSH
20768: LD_VAR 0 5
20772: LESS
20773: OR
20774: IFFALSE 20799
// selected := [ list + 0 , un ] ;
20776: LD_ADDR_VAR 0 3
20780: PUSH
20781: LD_VAR 0 5
20785: PUSH
20786: LD_INT 0
20788: PLUS
20789: PUSH
20790: LD_VAR 0 4
20794: PUSH
20795: EMPTY
20796: LIST
20797: LIST
20798: ST_TO_ADDR
// wait ( 1 ) ;
20799: LD_INT 1
20801: PPUSH
20802: CALL_OW 67
// end ;
20806: GO 20680
20808: POP
20809: POP
// if selected then
20810: LD_VAR 0 3
20814: IFFALSE 20830
// selected := selected [ 2 ] ;
20816: LD_ADDR_VAR 0 3
20820: PUSH
20821: LD_VAR 0 3
20825: PUSH
20826: LD_INT 2
20828: ARRAY
20829: ST_TO_ADDR
// result := selected ;
20830: LD_ADDR_VAR 0 2
20834: PUSH
20835: LD_VAR 0 3
20839: ST_TO_ADDR
// end ;
20840: LD_VAR 0 2
20844: RET
// function Find_Player_Base ; var list , un , goal , areas , defend_tought ; begin
20845: LD_INT 0
20847: PPUSH
20848: PPUSH
20849: PPUSH
20850: PPUSH
20851: PPUSH
20852: PPUSH
// goal := false ;
20853: LD_ADDR_VAR 0 4
20857: PUSH
20858: LD_INT 0
20860: ST_TO_ADDR
// areas := [ ] ;
20861: LD_ADDR_VAR 0 5
20865: PUSH
20866: EMPTY
20867: ST_TO_ADDR
// list := FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_building ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) ;
20868: LD_ADDR_VAR 0 2
20872: PUSH
20873: LD_INT 22
20875: PUSH
20876: LD_EXP 1
20880: PUSH
20881: EMPTY
20882: LIST
20883: LIST
20884: PUSH
20885: LD_INT 21
20887: PUSH
20888: LD_INT 3
20890: PUSH
20891: EMPTY
20892: LIST
20893: LIST
20894: PUSH
20895: LD_INT 2
20897: PUSH
20898: LD_INT 30
20900: PUSH
20901: LD_INT 0
20903: PUSH
20904: EMPTY
20905: LIST
20906: LIST
20907: PUSH
20908: LD_INT 30
20910: PUSH
20911: LD_INT 1
20913: PUSH
20914: EMPTY
20915: LIST
20916: LIST
20917: PUSH
20918: EMPTY
20919: LIST
20920: LIST
20921: LIST
20922: PUSH
20923: EMPTY
20924: LIST
20925: LIST
20926: LIST
20927: PPUSH
20928: CALL_OW 69
20932: ST_TO_ADDR
// for un in list do
20933: LD_ADDR_VAR 0 3
20937: PUSH
20938: LD_VAR 0 2
20942: PUSH
20943: FOR_IN
20944: IFFALSE 21043
// begin if IsInArea ( un , ar_base ) then
20946: LD_VAR 0 3
20950: PPUSH
20951: LD_INT 13
20953: PPUSH
20954: CALL_OW 308
20958: IFFALSE 20976
// areas := areas ^ ar_base else
20960: LD_ADDR_VAR 0 5
20964: PUSH
20965: LD_VAR 0 5
20969: PUSH
20970: LD_INT 13
20972: ADD
20973: ST_TO_ADDR
20974: GO 21034
// if IsInArea ( un , us_base ) then
20976: LD_VAR 0 3
20980: PPUSH
20981: LD_INT 11
20983: PPUSH
20984: CALL_OW 308
20988: IFFALSE 21006
// areas := areas ^ us_base else
20990: LD_ADDR_VAR 0 5
20994: PUSH
20995: LD_VAR 0 5
20999: PUSH
21000: LD_INT 11
21002: ADD
21003: ST_TO_ADDR
21004: GO 21034
// if IsInArea ( un , ru_base ) then
21006: LD_VAR 0 3
21010: PPUSH
21011: LD_INT 12
21013: PPUSH
21014: CALL_OW 308
21018: IFFALSE 21034
// areas := areas ^ ru_base ;
21020: LD_ADDR_VAR 0 5
21024: PUSH
21025: LD_VAR 0 5
21029: PUSH
21030: LD_INT 12
21032: ADD
21033: ST_TO_ADDR
// wait ( 1 ) ;
21034: LD_INT 1
21036: PPUSH
21037: CALL_OW 67
// end ;
21041: GO 20943
21043: POP
21044: POP
// if ( not areas ) or ( areas > 1 ) then
21045: LD_VAR 0 5
21049: NOT
21050: PUSH
21051: LD_VAR 0 5
21055: PUSH
21056: LD_INT 1
21058: GREATER
21059: OR
21060: IFFALSE 21079
// goal := Select_Weakest_Base ( areas ) else
21062: LD_ADDR_VAR 0 4
21066: PUSH
21067: LD_VAR 0 5
21071: PPUSH
21072: CALL 20656 0 1
21076: ST_TO_ADDR
21077: GO 21093
// goal := areas [ 1 ] ;
21079: LD_ADDR_VAR 0 4
21083: PUSH
21084: LD_VAR 0 5
21088: PUSH
21089: LD_INT 1
21091: ARRAY
21092: ST_TO_ADDR
// result := goal ;
21093: LD_ADDR_VAR 0 1
21097: PUSH
21098: LD_VAR 0 4
21102: ST_TO_ADDR
// end ;
21103: LD_VAR 0 1
21107: RET
// function GetUnitArea ( un ) ; var area ; begin
21108: LD_INT 0
21110: PPUSH
21111: PPUSH
// case un of 1 :
21112: LD_VAR 0 1
21116: PUSH
21117: LD_INT 1
21119: DOUBLE
21120: EQUAL
21121: IFTRUE 21125
21123: GO 21136
21125: POP
// area := us_base ; 2 :
21126: LD_ADDR_VAR 0 3
21130: PUSH
21131: LD_INT 11
21133: ST_TO_ADDR
21134: GO 21175
21136: LD_INT 2
21138: DOUBLE
21139: EQUAL
21140: IFTRUE 21144
21142: GO 21155
21144: POP
// area := ar_base ; 3 :
21145: LD_ADDR_VAR 0 3
21149: PUSH
21150: LD_INT 13
21152: ST_TO_ADDR
21153: GO 21175
21155: LD_INT 3
21157: DOUBLE
21158: EQUAL
21159: IFTRUE 21163
21161: GO 21174
21163: POP
// area := ru_base ; end ;
21164: LD_ADDR_VAR 0 3
21168: PUSH
21169: LD_INT 12
21171: ST_TO_ADDR
21172: GO 21175
21174: POP
// result := area ;
21175: LD_ADDR_VAR 0 2
21179: PUSH
21180: LD_VAR 0 3
21184: ST_TO_ADDR
// end ;
21185: LD_VAR 0 2
21189: RET
// function Find_CPU_Target ( side ) ; var un , goal , bases , list ; begin
21190: LD_INT 0
21192: PPUSH
21193: PPUSH
21194: PPUSH
21195: PPUSH
21196: PPUSH
// bases := [ ] ;
21197: LD_ADDR_VAR 0 5
21201: PUSH
21202: EMPTY
21203: ST_TO_ADDR
// list := FilterAllUnits ( [ [ f_type , unit_building ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) ;
21204: LD_ADDR_VAR 0 6
21208: PUSH
21209: LD_INT 21
21211: PUSH
21212: LD_INT 3
21214: PUSH
21215: EMPTY
21216: LIST
21217: LIST
21218: PUSH
21219: LD_INT 2
21221: PUSH
21222: LD_INT 30
21224: PUSH
21225: LD_INT 0
21227: PUSH
21228: EMPTY
21229: LIST
21230: LIST
21231: PUSH
21232: LD_INT 30
21234: PUSH
21235: LD_INT 1
21237: PUSH
21238: EMPTY
21239: LIST
21240: LIST
21241: PUSH
21242: EMPTY
21243: LIST
21244: LIST
21245: LIST
21246: PUSH
21247: EMPTY
21248: LIST
21249: LIST
21250: PPUSH
21251: CALL_OW 69
21255: ST_TO_ADDR
// for un in list do
21256: LD_ADDR_VAR 0 3
21260: PUSH
21261: LD_VAR 0 6
21265: PUSH
21266: FOR_IN
21267: IFFALSE 21309
// if GetSide ( un ) <> side then
21269: LD_VAR 0 3
21273: PPUSH
21274: CALL_OW 255
21278: PUSH
21279: LD_VAR 0 1
21283: NONEQUAL
21284: IFFALSE 21307
// bases := bases ^ GetSide ( un ) ;
21286: LD_ADDR_VAR 0 5
21290: PUSH
21291: LD_VAR 0 5
21295: PUSH
21296: LD_VAR 0 3
21300: PPUSH
21301: CALL_OW 255
21305: ADD
21306: ST_TO_ADDR
21307: GO 21266
21309: POP
21310: POP
// bases := bases diff you ;
21311: LD_ADDR_VAR 0 5
21315: PUSH
21316: LD_VAR 0 5
21320: PUSH
21321: LD_EXP 1
21325: DIFF
21326: ST_TO_ADDR
// if bases then
21327: LD_VAR 0 5
21331: IFFALSE 21415
// begin if ( bases diff ar ) and Rand ( 0 , 2 ) then
21333: LD_VAR 0 5
21337: PUSH
21338: LD_EXP 4
21342: DIFF
21343: PUSH
21344: LD_INT 0
21346: PPUSH
21347: LD_INT 2
21349: PPUSH
21350: CALL_OW 12
21354: AND
21355: IFFALSE 21384
// goal := GetUnitArea ( ( bases diff ar ) [ 1 ] ) else
21357: LD_ADDR_VAR 0 4
21361: PUSH
21362: LD_VAR 0 5
21366: PUSH
21367: LD_EXP 4
21371: DIFF
21372: PUSH
21373: LD_INT 1
21375: ARRAY
21376: PPUSH
21377: CALL 21108 0 1
21381: ST_TO_ADDR
21382: GO 21413
// goal := GetUnitArea ( bases [ Rand ( 1 , bases ) ] ) ;
21384: LD_ADDR_VAR 0 4
21388: PUSH
21389: LD_VAR 0 5
21393: PUSH
21394: LD_INT 1
21396: PPUSH
21397: LD_VAR 0 5
21401: PPUSH
21402: CALL_OW 12
21406: ARRAY
21407: PPUSH
21408: CALL 21108 0 1
21412: ST_TO_ADDR
// end else
21413: GO 21425
// goal := Find_Player_Base ;
21415: LD_ADDR_VAR 0 4
21419: PUSH
21420: CALL 20845 0 0
21424: ST_TO_ADDR
// result := goal ;
21425: LD_ADDR_VAR 0 2
21429: PUSH
21430: LD_VAR 0 4
21434: ST_TO_ADDR
// end ;
21435: LD_VAR 0 2
21439: RET
// function Wrong_Base ; var un , vysledek ; begin
21440: LD_INT 0
21442: PPUSH
21443: PPUSH
21444: PPUSH
// un := FilterUnitsInArea ( top_area , [ [ f_side , you ] , [ f_type , unit_building ] ] ) ;
21445: LD_ADDR_VAR 0 2
21449: PUSH
21450: LD_INT 20
21452: PPUSH
21453: LD_INT 22
21455: PUSH
21456: LD_EXP 1
21460: PUSH
21461: EMPTY
21462: LIST
21463: LIST
21464: PUSH
21465: LD_INT 21
21467: PUSH
21468: LD_INT 3
21470: PUSH
21471: EMPTY
21472: LIST
21473: LIST
21474: PUSH
21475: EMPTY
21476: LIST
21477: LIST
21478: PPUSH
21479: CALL_OW 70
21483: ST_TO_ADDR
// if un then
21484: LD_VAR 0 2
21488: IFFALSE 21500
// vysledek := true else
21490: LD_ADDR_VAR 0 3
21494: PUSH
21495: LD_INT 1
21497: ST_TO_ADDR
21498: GO 21508
// vysledek := false ;
21500: LD_ADDR_VAR 0 3
21504: PUSH
21505: LD_INT 0
21507: ST_TO_ADDR
// result := vysledek ;
21508: LD_ADDR_VAR 0 1
21512: PUSH
21513: LD_VAR 0 3
21517: ST_TO_ADDR
// end ;
21518: LD_VAR 0 1
21522: RET
// function All_Tracked ( list ) ; var un , vysledek ; begin
21523: LD_INT 0
21525: PPUSH
21526: PPUSH
21527: PPUSH
// vysledek := true ;
21528: LD_ADDR_VAR 0 4
21532: PUSH
21533: LD_INT 1
21535: ST_TO_ADDR
// for un in list do
21536: LD_ADDR_VAR 0 3
21540: PUSH
21541: LD_VAR 0 1
21545: PUSH
21546: FOR_IN
21547: IFFALSE 21587
// if GetChassis ( un ) in [ us_light_wheeled , us_medium_wheeled , ru_medium_wheeled ] then
21549: LD_VAR 0 3
21553: PPUSH
21554: CALL_OW 265
21558: PUSH
21559: LD_INT 1
21561: PUSH
21562: LD_INT 2
21564: PUSH
21565: LD_INT 21
21567: PUSH
21568: EMPTY
21569: LIST
21570: LIST
21571: LIST
21572: IN
21573: IFFALSE 21585
// begin vysledek := false ;
21575: LD_ADDR_VAR 0 4
21579: PUSH
21580: LD_INT 0
21582: ST_TO_ADDR
// break ;
21583: GO 21587
// end ;
21585: GO 21546
21587: POP
21588: POP
// result := vysledek ;
21589: LD_ADDR_VAR 0 2
21593: PUSH
21594: LD_VAR 0 4
21598: ST_TO_ADDR
// end ;
21599: LD_VAR 0 2
21603: RET
// function Send_US_Forces ( target , side ) ; begin
21604: LD_INT 0
21606: PPUSH
// if target = ar_base then
21607: LD_VAR 0 1
21611: PUSH
21612: LD_INT 13
21614: EQUAL
21615: IFFALSE 21728
// begin if All_tracked ( attack_forces [ side ] ) then
21617: LD_EXP 64
21621: PUSH
21622: LD_VAR 0 2
21626: ARRAY
21627: PPUSH
21628: CALL 21523 0 1
21632: IFFALSE 21681
// McMove ( 15 , attack_forces [ side ] , us_ar [ 1 ] , [ mc_move_waitwp , mc_move_dontcapture , mc_move_agressive , mc_move_ownstuck ] ) else
21634: LD_INT 15
21636: PPUSH
21637: LD_EXP 64
21641: PUSH
21642: LD_VAR 0 2
21646: ARRAY
21647: PPUSH
21648: LD_LOC 22
21652: PUSH
21653: LD_INT 1
21655: ARRAY
21656: PPUSH
21657: LD_INT 3
21659: PUSH
21660: LD_INT 5
21662: PUSH
21663: LD_INT 6
21665: PUSH
21666: LD_INT 7
21668: PUSH
21669: EMPTY
21670: LIST
21671: LIST
21672: LIST
21673: LIST
21674: PPUSH
21675: CALL_OW 398
21679: GO 21726
// McMove ( 15 , attack_forces [ side ] , us_ar [ 2 ] , [ mc_move_waitwp , mc_move_dontcapture , mc_move_agressive , mc_move_ownstuck ] ) ;
21681: LD_INT 15
21683: PPUSH
21684: LD_EXP 64
21688: PUSH
21689: LD_VAR 0 2
21693: ARRAY
21694: PPUSH
21695: LD_LOC 22
21699: PUSH
21700: LD_INT 2
21702: ARRAY
21703: PPUSH
21704: LD_INT 3
21706: PUSH
21707: LD_INT 5
21709: PUSH
21710: LD_INT 6
21712: PUSH
21713: LD_INT 7
21715: PUSH
21716: EMPTY
21717: LIST
21718: LIST
21719: LIST
21720: LIST
21721: PPUSH
21722: CALL_OW 398
// end else
21726: GO 21769
// McMove ( 15 , attack_forces [ side ] , us_ru , [ mc_move_waitwp , mc_move_dontcapture , mc_move_agressive , mc_move_ownstuck ] ) ;
21728: LD_INT 15
21730: PPUSH
21731: LD_EXP 64
21735: PUSH
21736: LD_VAR 0 2
21740: ARRAY
21741: PPUSH
21742: LD_LOC 21
21746: PPUSH
21747: LD_INT 3
21749: PUSH
21750: LD_INT 5
21752: PUSH
21753: LD_INT 6
21755: PUSH
21756: LD_INT 7
21758: PUSH
21759: EMPTY
21760: LIST
21761: LIST
21762: LIST
21763: LIST
21764: PPUSH
21765: CALL_OW 398
// end ;
21769: LD_VAR 0 3
21773: RET
// function Send_RU_Forces ( target , side ) ; begin
21774: LD_INT 0
21776: PPUSH
// if target = ar_base then
21777: LD_VAR 0 1
21781: PUSH
21782: LD_INT 13
21784: EQUAL
21785: IFFALSE 21898
// begin if All_tracked ( attack_forces [ side ] ) then
21787: LD_EXP 64
21791: PUSH
21792: LD_VAR 0 2
21796: ARRAY
21797: PPUSH
21798: CALL 21523 0 1
21802: IFFALSE 21851
// McMove ( 15 , attack_forces [ side ] , ru_ar [ 1 ] , [ mc_move_waitwp , mc_move_dontcapture , mc_move_agressive , mc_move_ownstuck ] ) else
21804: LD_INT 15
21806: PPUSH
21807: LD_EXP 64
21811: PUSH
21812: LD_VAR 0 2
21816: ARRAY
21817: PPUSH
21818: LD_LOC 24
21822: PUSH
21823: LD_INT 1
21825: ARRAY
21826: PPUSH
21827: LD_INT 3
21829: PUSH
21830: LD_INT 5
21832: PUSH
21833: LD_INT 6
21835: PUSH
21836: LD_INT 7
21838: PUSH
21839: EMPTY
21840: LIST
21841: LIST
21842: LIST
21843: LIST
21844: PPUSH
21845: CALL_OW 398
21849: GO 21896
// McMove ( 15 , attack_forces [ side ] , ru_ar [ 2 ] , [ mc_move_waitwp , mc_move_dontcapture , mc_move_agressive , mc_move_ownstuck ] ) ;
21851: LD_INT 15
21853: PPUSH
21854: LD_EXP 64
21858: PUSH
21859: LD_VAR 0 2
21863: ARRAY
21864: PPUSH
21865: LD_LOC 24
21869: PUSH
21870: LD_INT 2
21872: ARRAY
21873: PPUSH
21874: LD_INT 3
21876: PUSH
21877: LD_INT 5
21879: PUSH
21880: LD_INT 6
21882: PUSH
21883: LD_INT 7
21885: PUSH
21886: EMPTY
21887: LIST
21888: LIST
21889: LIST
21890: LIST
21891: PPUSH
21892: CALL_OW 398
// end else
21896: GO 21939
// McMove ( 15 , attack_forces [ side ] , ru_us , [ mc_move_waitwp , mc_move_dontcapture , mc_move_agressive , mc_move_ownstuck ] ) ;
21898: LD_INT 15
21900: PPUSH
21901: LD_EXP 64
21905: PUSH
21906: LD_VAR 0 2
21910: ARRAY
21911: PPUSH
21912: LD_LOC 23
21916: PPUSH
21917: LD_INT 3
21919: PUSH
21920: LD_INT 5
21922: PUSH
21923: LD_INT 6
21925: PUSH
21926: LD_INT 7
21928: PUSH
21929: EMPTY
21930: LIST
21931: LIST
21932: LIST
21933: LIST
21934: PPUSH
21935: CALL_OW 398
// end ;
21939: LD_VAR 0 3
21943: RET
// function let_the_war_begin ( side ) ; var target ; begin
21944: LD_INT 0
21946: PPUSH
21947: PPUSH
// target := false ;
21948: LD_ADDR_VAR 0 3
21952: PUSH
21953: LD_INT 0
21955: ST_TO_ADDR
// if define_target_priority then
21956: CALL 20544 0 0
21960: IFFALSE 21972
// target := Find_Player_Base ;
21962: LD_ADDR_VAR 0 3
21966: PUSH
21967: CALL 20845 0 0
21971: ST_TO_ADDR
// if not target then
21972: LD_VAR 0 3
21976: NOT
21977: IFFALSE 21994
// target := Find_CPU_Target ( side ) ;
21979: LD_ADDR_VAR 0 3
21983: PUSH
21984: LD_VAR 0 1
21988: PPUSH
21989: CALL 21190 0 1
21993: ST_TO_ADDR
// if not target then
21994: LD_VAR 0 3
21998: NOT
21999: IFFALSE 22010
// begin Msg ( Nenalezen zadny cil pro utok. ) ;
22001: LD_STRING Nenalezen zadny cil pro utok.
22003: PPUSH
22004: CALL_OW 100
// exit ;
22008: GO 22196
// end ; attack_forces := Delete ( attack_forces , side ) ;
22010: LD_ADDR_EXP 64
22014: PUSH
22015: LD_EXP 64
22019: PPUSH
22020: LD_VAR 0 1
22024: PPUSH
22025: CALL_OW 3
22029: ST_TO_ADDR
// attack_forces := Insert ( attack_forces , side , ready_forces [ side ] ) ;
22030: LD_ADDR_EXP 64
22034: PUSH
22035: LD_EXP 64
22039: PPUSH
22040: LD_VAR 0 1
22044: PPUSH
22045: LD_EXP 63
22049: PUSH
22050: LD_VAR 0 1
22054: ARRAY
22055: PPUSH
22056: CALL_OW 2
22060: ST_TO_ADDR
// ready_forces := Delete ( ready_forces , side ) ;
22061: LD_ADDR_EXP 63
22065: PUSH
22066: LD_EXP 63
22070: PPUSH
22071: LD_VAR 0 1
22075: PPUSH
22076: CALL_OW 3
22080: ST_TO_ADDR
// ready_forces := Insert ( ready_forces , side , [ ] ) ;
22081: LD_ADDR_EXP 63
22085: PUSH
22086: LD_EXP 63
22090: PPUSH
22091: LD_VAR 0 1
22095: PPUSH
22096: EMPTY
22097: PPUSH
22098: CALL_OW 2
22102: ST_TO_ADDR
// if Wrong_Base then
22103: CALL 21440 0 0
22107: IFFALSE 22140
// McMove ( 15 , attack_forces [ side ] , al_eliminate , [ mc_move_dontcapture ] ) else
22109: LD_INT 15
22111: PPUSH
22112: LD_EXP 64
22116: PUSH
22117: LD_VAR 0 1
22121: ARRAY
22122: PPUSH
22123: LD_LOC 28
22127: PPUSH
22128: LD_INT 5
22130: PUSH
22131: EMPTY
22132: LIST
22133: PPUSH
22134: CALL_OW 398
22138: GO 22196
// case side of 1 :
22140: LD_VAR 0 1
22144: PUSH
22145: LD_INT 1
22147: DOUBLE
22148: EQUAL
22149: IFTRUE 22153
22151: GO 22170
22153: POP
// Send_US_Forces ( target , side ) ; 3 :
22154: LD_VAR 0 3
22158: PPUSH
22159: LD_VAR 0 1
22163: PPUSH
22164: CALL 21604 0 2
22168: GO 22196
22170: LD_INT 3
22172: DOUBLE
22173: EQUAL
22174: IFTRUE 22178
22176: GO 22195
22178: POP
// Send_RU_Forces ( target , side ) ; end ;
22179: LD_VAR 0 3
22183: PPUSH
22184: LD_VAR 0 1
22188: PPUSH
22189: CALL 21774 0 2
22193: GO 22196
22195: POP
// end ; end_of_file
22196: LD_VAR 0 2
22200: RET
// var tech_list , weap_list , sib_list , comp_list , opto_list , bio_list , space_list ; var utech_basic , utech_weap , utech_sib , utech_comp , utech_bio , utech_space , utech_opto ; var basic_tech , upgrade_tech ; var first_technology , last_technology , recomended_technology ; export scientistic_wanted ; var all_invented ; export function init_research ; begin
22201: LD_INT 0
22203: PPUSH
// all_invented := [ false , false , false , false , false , false , false , false ] ;
22204: LD_ADDR_LOC 48
22208: PUSH
22209: LD_INT 0
22211: PUSH
22212: LD_INT 0
22214: PUSH
22215: LD_INT 0
22217: PUSH
22218: LD_INT 0
22220: PUSH
22221: LD_INT 0
22223: PUSH
22224: LD_INT 0
22226: PUSH
22227: LD_INT 0
22229: PUSH
22230: LD_INT 0
22232: PUSH
22233: EMPTY
22234: LIST
22235: LIST
22236: LIST
22237: LIST
22238: LIST
22239: LIST
22240: LIST
22241: LIST
22242: ST_TO_ADDR
// tech_list := [ tech_SolPow , tech_SolEng , tech_OilPow , tech_OilEng , tech_SibDet , tech_ApeLang , tech_ApePsych , tech_ApeAgres ] ;
22243: LD_ADDR_LOC 29
22247: PUSH
22248: LD_INT 35
22250: PUSH
22251: LD_INT 45
22253: PUSH
22254: LD_INT 46
22256: PUSH
22257: LD_INT 47
22259: PUSH
22260: LD_INT 20
22262: PUSH
22263: LD_INT 1
22265: PUSH
22266: LD_INT 2
22268: PUSH
22269: LD_INT 11
22271: PUSH
22272: EMPTY
22273: LIST
22274: LIST
22275: LIST
22276: LIST
22277: LIST
22278: LIST
22279: LIST
22280: LIST
22281: ST_TO_ADDR
// weap_list := [ tech_Gatling , tech_Gun , tech_Explos , tech_AdvMet , tech_Rocket , tech_AdvRocket , tech_Bazooka , tech_Mortar , tech_AdvChassis , tech_Soporific , tech_Flame , tech_Behemoth , tech_SelfDest ] ;
22282: LD_ADDR_LOC 30
22286: PUSH
22287: LD_INT 69
22289: PUSH
22290: LD_INT 39
22292: PUSH
22293: LD_INT 42
22295: PUSH
22296: LD_INT 34
22298: PUSH
22299: LD_INT 40
22301: PUSH
22302: LD_INT 71
22304: PUSH
22305: LD_INT 44
22307: PUSH
22308: LD_INT 41
22310: PUSH
22311: LD_INT 36
22313: PUSH
22314: LD_INT 13
22316: PUSH
22317: LD_INT 70
22319: PUSH
22320: LD_INT 23
22322: PUSH
22323: LD_INT 43
22325: PUSH
22326: EMPTY
22327: LIST
22328: LIST
22329: LIST
22330: LIST
22331: LIST
22332: LIST
22333: LIST
22334: LIST
22335: LIST
22336: LIST
22337: LIST
22338: LIST
22339: LIST
22340: ST_TO_ADDR
// sib_list := [ tech_SibPow , tech_SibEng , tech_SibFiss ] ;
22341: LD_ADDR_LOC 31
22345: PUSH
22346: LD_INT 21
22348: PUSH
22349: LD_INT 22
22351: PUSH
22352: LD_INT 25
22354: PUSH
22355: EMPTY
22356: LIST
22357: LIST
22358: LIST
22359: ST_TO_ADDR
// comp_list := [ tech_AI , tech_AdvAI , tech_Virus , tech_TargTeleport ] ;
22360: LD_ADDR_LOC 32
22364: PUSH
22365: LD_INT 32
22367: PUSH
22368: LD_INT 27
22370: PUSH
22371: LD_INT 33
22373: PUSH
22374: LD_INT 38
22376: PUSH
22377: EMPTY
22378: LIST
22379: LIST
22380: LIST
22381: LIST
22382: ST_TO_ADDR
// opto_list := [ tech_Radar , tech_LasSight , tech_RemCont , tech_Laser , tech_MatDet , tech_PartInvis , tech_RemCharge ] ;
22383: LD_ADDR_LOC 33
22387: PUSH
22388: LD_INT 6
22390: PUSH
22391: LD_INT 12
22393: PUSH
22394: LD_INT 15
22396: PUSH
22397: LD_INT 10
22399: PUSH
22400: LD_INT 7
22402: PUSH
22403: LD_INT 16
22405: PUSH
22406: LD_INT 18
22408: PUSH
22409: EMPTY
22410: LIST
22411: LIST
22412: LIST
22413: LIST
22414: LIST
22415: LIST
22416: LIST
22417: ST_TO_ADDR
// bio_list := [ tech_ApeNeural , tech_ApeBrain , tech_StimDrugs , tech_BioDet ] ;
22418: LD_ADDR_LOC 34
22422: PUSH
22423: LD_INT 3
22425: PUSH
22426: LD_INT 4
22428: PUSH
22429: LD_INT 5
22431: PUSH
22432: LD_INT 8
22434: PUSH
22435: EMPTY
22436: LIST
22437: LIST
22438: LIST
22439: LIST
22440: ST_TO_ADDR
// space_list := [ tech_TauField , tech_Lapser , tech_LimTeleport , tech_TauRad , tech_SpacAnom ] ;
22441: LD_ADDR_LOC 35
22445: PUSH
22446: LD_INT 30
22448: PUSH
22449: LD_INT 31
22451: PUSH
22452: LD_INT 37
22454: PUSH
22455: LD_INT 28
22457: PUSH
22458: LD_INT 29
22460: PUSH
22461: EMPTY
22462: LIST
22463: LIST
22464: LIST
22465: LIST
22466: LIST
22467: ST_TO_ADDR
// basic_tech := [ tech_list , weap_list , sib_list , comp_list , bio_list , space_list , opto_list ] ;
22468: LD_ADDR_LOC 43
22472: PUSH
22473: LD_LOC 29
22477: PUSH
22478: LD_LOC 30
22482: PUSH
22483: LD_LOC 31
22487: PUSH
22488: LD_LOC 32
22492: PUSH
22493: LD_LOC 34
22497: PUSH
22498: LD_LOC 35
22502: PUSH
22503: LD_LOC 33
22507: PUSH
22508: EMPTY
22509: LIST
22510: LIST
22511: LIST
22512: LIST
22513: LIST
22514: LIST
22515: LIST
22516: ST_TO_ADDR
// utech_basic := [ tech_Tech1 , tech_Tech2 , tech_Tech3 ] ;
22517: LD_ADDR_LOC 36
22521: PUSH
22522: LD_INT 48
22524: PUSH
22525: LD_INT 49
22527: PUSH
22528: LD_INT 50
22530: PUSH
22531: EMPTY
22532: LIST
22533: LIST
22534: LIST
22535: ST_TO_ADDR
// utech_weap := [ tech_Weap1 , tech_Weap2 , tech_Weap3 ] ;
22536: LD_ADDR_LOC 37
22540: PUSH
22541: LD_INT 51
22543: PUSH
22544: LD_INT 52
22546: PUSH
22547: LD_INT 53
22549: PUSH
22550: EMPTY
22551: LIST
22552: LIST
22553: LIST
22554: ST_TO_ADDR
// utech_sib := [ tech_Sib1 , tech_Sib2 , tech_Sib3 ] ;
22555: LD_ADDR_LOC 38
22559: PUSH
22560: LD_INT 54
22562: PUSH
22563: LD_INT 55
22565: PUSH
22566: LD_INT 56
22568: PUSH
22569: EMPTY
22570: LIST
22571: LIST
22572: LIST
22573: ST_TO_ADDR
// utech_comp := [ tech_Comp1 , tech_Comp2 , tech_Comp3 ] ;
22574: LD_ADDR_LOC 39
22578: PUSH
22579: LD_INT 57
22581: PUSH
22582: LD_INT 58
22584: PUSH
22585: LD_INT 59
22587: PUSH
22588: EMPTY
22589: LIST
22590: LIST
22591: LIST
22592: ST_TO_ADDR
// utech_bio := [ tech_Bio1 , tech_Bio2 , tech_Bio3 ] ;
22593: LD_ADDR_LOC 40
22597: PUSH
22598: LD_INT 66
22600: PUSH
22601: LD_INT 67
22603: PUSH
22604: LD_INT 68
22606: PUSH
22607: EMPTY
22608: LIST
22609: LIST
22610: LIST
22611: ST_TO_ADDR
// utech_space := [ tech_ST1 , tech_ST2 , tech_ST3 ] ;
22612: LD_ADDR_LOC 41
22616: PUSH
22617: LD_INT 63
22619: PUSH
22620: LD_INT 64
22622: PUSH
22623: LD_INT 65
22625: PUSH
22626: EMPTY
22627: LIST
22628: LIST
22629: LIST
22630: ST_TO_ADDR
// utech_opto := [ tech_Opto1 , tech_Opto2 , tech_Opto3 ] ;
22631: LD_ADDR_LOC 42
22635: PUSH
22636: LD_INT 60
22638: PUSH
22639: LD_INT 61
22641: PUSH
22642: LD_INT 62
22644: PUSH
22645: EMPTY
22646: LIST
22647: LIST
22648: LIST
22649: ST_TO_ADDR
// end ;
22650: LD_VAR 0 1
22654: RET
// function init_upgrade_by_nations ( side_nation ) ; begin
22655: LD_INT 0
22657: PPUSH
// first_technology := [ tech_SolPow , tech_OilPow , tech_OilEng , tech_SibDet , tech_SibPow , tech_AI , tech_AdvAI ] ;
22658: LD_ADDR_LOC 45
22662: PUSH
22663: LD_INT 35
22665: PUSH
22666: LD_INT 46
22668: PUSH
22669: LD_INT 47
22671: PUSH
22672: LD_INT 20
22674: PUSH
22675: LD_INT 21
22677: PUSH
22678: LD_INT 32
22680: PUSH
22681: LD_INT 27
22683: PUSH
22684: EMPTY
22685: LIST
22686: LIST
22687: LIST
22688: LIST
22689: LIST
22690: LIST
22691: LIST
22692: ST_TO_ADDR
// last_technology := [ tech_ApeBrain , tech_Flame , tech_Soporific , tech_SibFiss ] ;
22693: LD_ADDR_LOC 46
22697: PUSH
22698: LD_INT 4
22700: PUSH
22701: LD_INT 70
22703: PUSH
22704: LD_INT 13
22706: PUSH
22707: LD_INT 25
22709: PUSH
22710: EMPTY
22711: LIST
22712: LIST
22713: LIST
22714: LIST
22715: ST_TO_ADDR
// recomended_technology := [ tech_Gun , tech_Tech1 , tech_Comp1 , tech_Tech2 , tech_Comp2 , tech_Tech3 , tech_Comp3 ] ;
22716: LD_ADDR_LOC 47
22720: PUSH
22721: LD_INT 39
22723: PUSH
22724: LD_INT 48
22726: PUSH
22727: LD_INT 57
22729: PUSH
22730: LD_INT 49
22732: PUSH
22733: LD_INT 58
22735: PUSH
22736: LD_INT 50
22738: PUSH
22739: LD_INT 59
22741: PUSH
22742: EMPTY
22743: LIST
22744: LIST
22745: LIST
22746: LIST
22747: LIST
22748: LIST
22749: LIST
22750: ST_TO_ADDR
// case side_nation of 1 :
22751: LD_VAR 0 1
22755: PUSH
22756: LD_INT 1
22758: DOUBLE
22759: EQUAL
22760: IFTRUE 22764
22762: GO 22804
22764: POP
// upgrade_tech := [ utech_basic , utech_weap , utech_sib , utech_comp , utech_opto ] ; 2 :
22765: LD_ADDR_LOC 44
22769: PUSH
22770: LD_LOC 36
22774: PUSH
22775: LD_LOC 37
22779: PUSH
22780: LD_LOC 38
22784: PUSH
22785: LD_LOC 39
22789: PUSH
22790: LD_LOC 42
22794: PUSH
22795: EMPTY
22796: LIST
22797: LIST
22798: LIST
22799: LIST
22800: LIST
22801: ST_TO_ADDR
22802: GO 22901
22804: LD_INT 2
22806: DOUBLE
22807: EQUAL
22808: IFTRUE 22812
22810: GO 22852
22812: POP
// upgrade_tech := [ utech_basic , utech_weap , utech_sib , utech_bio , utech_opto ] ; 3 :
22813: LD_ADDR_LOC 44
22817: PUSH
22818: LD_LOC 36
22822: PUSH
22823: LD_LOC 37
22827: PUSH
22828: LD_LOC 38
22832: PUSH
22833: LD_LOC 40
22837: PUSH
22838: LD_LOC 42
22842: PUSH
22843: EMPTY
22844: LIST
22845: LIST
22846: LIST
22847: LIST
22848: LIST
22849: ST_TO_ADDR
22850: GO 22901
22852: LD_INT 3
22854: DOUBLE
22855: EQUAL
22856: IFTRUE 22860
22858: GO 22900
22860: POP
// upgrade_tech := [ utech_basic , utech_weap , utech_sib , utech_comp , utech_space ] ; end ;
22861: LD_ADDR_LOC 44
22865: PUSH
22866: LD_LOC 36
22870: PUSH
22871: LD_LOC 37
22875: PUSH
22876: LD_LOC 38
22880: PUSH
22881: LD_LOC 39
22885: PUSH
22886: LD_LOC 41
22890: PUSH
22891: EMPTY
22892: LIST
22893: LIST
22894: LIST
22895: LIST
22896: LIST
22897: ST_TO_ADDR
22898: GO 22901
22900: POP
// end ;
22901: LD_VAR 0 2
22905: RET
// every 0 0$5.5 do var un , active_side , active_nation , lab_list , still_researching ;
22906: GO 22908
22908: DISABLE
22909: LD_INT 0
22911: PPUSH
22912: PPUSH
22913: PPUSH
22914: PPUSH
22915: PPUSH
// begin for active_side in cpu_list do
22916: LD_ADDR_VAR 0 2
22920: PUSH
22921: LD_EXP 8
22925: PUSH
22926: FOR_IN
22927: IFFALSE 23036
// begin still_researching := false ;
22929: LD_ADDR_VAR 0 5
22933: PUSH
22934: LD_INT 0
22936: ST_TO_ADDR
// lab_list := get_labs ( active_side ) ;
22937: LD_ADDR_VAR 0 4
22941: PUSH
22942: LD_VAR 0 2
22946: PPUSH
22947: CALL 23123 0 1
22951: ST_TO_ADDR
// for un in lab_list do
22952: LD_ADDR_VAR 0 1
22956: PUSH
22957: LD_VAR 0 4
22961: PUSH
22962: FOR_IN
22963: IFFALSE 22990
// if BuildingStatus ( un ) = bs_working then
22965: LD_VAR 0 1
22969: PPUSH
22970: CALL_OW 461
22974: PUSH
22975: LD_INT 3
22977: EQUAL
22978: IFFALSE 22988
// still_researching := true ;
22980: LD_ADDR_VAR 0 5
22984: PUSH
22985: LD_INT 1
22987: ST_TO_ADDR
22988: GO 22962
22990: POP
22991: POP
// active_nation := GetCPUNation ( active_side ) ;
22992: LD_ADDR_VAR 0 3
22996: PUSH
22997: LD_VAR 0 2
23001: PPUSH
23002: CALL 24724 0 1
23006: ST_TO_ADDR
// if ( not still_researching ) and active_nation then
23007: LD_VAR 0 5
23011: NOT
23012: PUSH
23013: LD_VAR 0 3
23017: AND
23018: IFFALSE 23034
// start_new_research ( active_side , active_nation ) ;
23020: LD_VAR 0 2
23024: PPUSH
23025: LD_VAR 0 3
23029: PPUSH
23030: CALL 23196 0 2
// end ;
23034: GO 22926
23036: POP
23037: POP
// if ( cpu_list ) and ( not all_cpu_invented ) then
23038: LD_EXP 8
23042: PUSH
23043: CALL 23055 0 0
23047: NOT
23048: AND
23049: IFFALSE 23052
// enable ;
23051: ENABLE
// end ;
23052: PPOPN 5
23054: END
// function all_cpu_invented ; var un , vysledek ; begin
23055: LD_INT 0
23057: PPUSH
23058: PPUSH
23059: PPUSH
// vysledek := true ;
23060: LD_ADDR_VAR 0 3
23064: PUSH
23065: LD_INT 1
23067: ST_TO_ADDR
// for un in cpu_list do
23068: LD_ADDR_VAR 0 2
23072: PUSH
23073: LD_EXP 8
23077: PUSH
23078: FOR_IN
23079: IFFALSE 23106
// if not all_invented [ un ] then
23081: LD_LOC 48
23085: PUSH
23086: LD_VAR 0 2
23090: ARRAY
23091: NOT
23092: IFFALSE 23104
// begin vysledek := false ;
23094: LD_ADDR_VAR 0 3
23098: PUSH
23099: LD_INT 0
23101: ST_TO_ADDR
// break ;
23102: GO 23106
// end ;
23104: GO 23078
23106: POP
23107: POP
// result := vysledek ;
23108: LD_ADDR_VAR 0 1
23112: PUSH
23113: LD_VAR 0 3
23117: ST_TO_ADDR
// end ;
23118: LD_VAR 0 1
23122: RET
// function get_labs ( side ) ; var lab_list ; begin
23123: LD_INT 0
23125: PPUSH
23126: PPUSH
// lab_list := FilterAllUnits ( [ [ f_side , side ] , [ f_or , [ f_btype , b_lab_full ] , [ f_btype , b_lab ] ] ] ) ;
23127: LD_ADDR_VAR 0 3
23131: PUSH
23132: LD_INT 22
23134: PUSH
23135: LD_VAR 0 1
23139: PUSH
23140: EMPTY
23141: LIST
23142: LIST
23143: PUSH
23144: LD_INT 2
23146: PUSH
23147: LD_INT 30
23149: PUSH
23150: LD_INT 8
23152: PUSH
23153: EMPTY
23154: LIST
23155: LIST
23156: PUSH
23157: LD_INT 30
23159: PUSH
23160: LD_INT 6
23162: PUSH
23163: EMPTY
23164: LIST
23165: LIST
23166: PUSH
23167: EMPTY
23168: LIST
23169: LIST
23170: LIST
23171: PUSH
23172: EMPTY
23173: LIST
23174: LIST
23175: PPUSH
23176: CALL_OW 69
23180: ST_TO_ADDR
// result := lab_list ;
23181: LD_ADDR_VAR 0 2
23185: PUSH
23186: LD_VAR 0 3
23190: ST_TO_ADDR
// end ;
23191: LD_VAR 0 2
23195: RET
// function start_new_research ( side , nation ) ; var lab_list , possible , to_research , lab , scientistic ; begin
23196: LD_INT 0
23198: PPUSH
23199: PPUSH
23200: PPUSH
23201: PPUSH
23202: PPUSH
23203: PPUSH
// scientistic := request_people ( side , class_scientistic , 1 ) ;
23204: LD_ADDR_VAR 0 8
23208: PUSH
23209: LD_VAR 0 1
23213: PPUSH
23214: LD_INT 4
23216: PPUSH
23217: LD_INT 1
23219: PPUSH
23220: CALL 24656 0 3
23224: ST_TO_ADDR
// lab_list := get_labs ( side ) ;
23225: LD_ADDR_VAR 0 4
23229: PUSH
23230: LD_VAR 0 1
23234: PPUSH
23235: CALL 23123 0 1
23239: ST_TO_ADDR
// init_upgrade_by_nations ( nation ) ;
23240: LD_VAR 0 2
23244: PPUSH
23245: CALL 22655 0 1
// possible := get_possible_research ( side ) ;
23249: LD_ADDR_VAR 0 5
23253: PUSH
23254: LD_VAR 0 1
23258: PPUSH
23259: CALL 23343 0 1
23263: ST_TO_ADDR
// to_research := select_next_technology ( side , possible ) ;
23264: LD_ADDR_VAR 0 6
23268: PUSH
23269: LD_VAR 0 1
23273: PPUSH
23274: LD_VAR 0 5
23278: PPUSH
23279: CALL 23794 0 2
23283: ST_TO_ADDR
// lab := research_possible ( side , to_research ) ;
23284: LD_ADDR_VAR 0 7
23288: PUSH
23289: LD_VAR 0 1
23293: PPUSH
23294: LD_VAR 0 6
23298: PPUSH
23299: CALL 24353 0 2
23303: ST_TO_ADDR
// if lab then
23304: LD_VAR 0 7
23308: IFFALSE 23338
// begin transfer_scientistic ( scientistic , lab ) ;
23310: LD_VAR 0 8
23314: PPUSH
23315: LD_VAR 0 7
23319: PPUSH
23320: CALL 24474 0 2
// begin_of_research ( lab , to_research ) ;
23324: LD_VAR 0 7
23328: PPUSH
23329: LD_VAR 0 6
23333: PPUSH
23334: CALL 24582 0 2
// end ; end ;
23338: LD_VAR 0 3
23342: RET
// function get_possible_research ( side ) ; var un , vysledek , lab_list , upgrade ; begin
23343: LD_INT 0
23345: PPUSH
23346: PPUSH
23347: PPUSH
23348: PPUSH
23349: PPUSH
// vysledek := [ ] ;
23350: LD_ADDR_VAR 0 4
23354: PUSH
23355: EMPTY
23356: ST_TO_ADDR
// upgrade := [ ] ;
23357: LD_ADDR_VAR 0 6
23361: PUSH
23362: EMPTY
23363: ST_TO_ADDR
// lab_list := get_labs ( side ) ;
23364: LD_ADDR_VAR 0 5
23368: PUSH
23369: LD_VAR 0 1
23373: PPUSH
23374: CALL 23123 0 1
23378: ST_TO_ADDR
// for un in lab_list do
23379: LD_ADDR_VAR 0 3
23383: PUSH
23384: LD_VAR 0 5
23388: PUSH
23389: FOR_IN
23390: IFFALSE 23432
// upgrade := upgrade ^ GetLabKind ( un , 1 ) ^ GetLabKind ( un , 2 ) ;
23392: LD_ADDR_VAR 0 6
23396: PUSH
23397: LD_VAR 0 6
23401: PUSH
23402: LD_VAR 0 3
23406: PPUSH
23407: LD_INT 1
23409: PPUSH
23410: CALL_OW 268
23414: ADD
23415: PUSH
23416: LD_VAR 0 3
23420: PPUSH
23421: LD_INT 2
23423: PPUSH
23424: CALL_OW 268
23428: ADD
23429: ST_TO_ADDR
23430: GO 23389
23432: POP
23433: POP
// for un in upgrade do
23434: LD_ADDR_VAR 0 3
23438: PUSH
23439: LD_VAR 0 6
23443: PUSH
23444: FOR_IN
23445: IFFALSE 23469
// vysledek := vysledek ^ ( un - 8 ) ;
23447: LD_ADDR_VAR 0 4
23451: PUSH
23452: LD_VAR 0 4
23456: PUSH
23457: LD_VAR 0 3
23461: PUSH
23462: LD_INT 8
23464: MINUS
23465: ADD
23466: ST_TO_ADDR
23467: GO 23444
23469: POP
23470: POP
// result := vysledek ;
23471: LD_ADDR_VAR 0 2
23475: PUSH
23476: LD_VAR 0 4
23480: ST_TO_ADDR
// end ;
23481: LD_VAR 0 2
23485: RET
// function shake_it_baby ( list ) ; var vysledek , pom , i , n ; begin
23486: LD_INT 0
23488: PPUSH
23489: PPUSH
23490: PPUSH
23491: PPUSH
23492: PPUSH
// vysledek := [ ] ;
23493: LD_ADDR_VAR 0 3
23497: PUSH
23498: EMPTY
23499: ST_TO_ADDR
// for i = 1 to list do
23500: LD_ADDR_VAR 0 5
23504: PUSH
23505: DOUBLE
23506: LD_INT 1
23508: DEC
23509: ST_TO_ADDR
23510: LD_VAR 0 1
23514: PUSH
23515: FOR_TO
23516: IFFALSE 23590
// begin n := Rand ( 1 , list ) ;
23518: LD_ADDR_VAR 0 6
23522: PUSH
23523: LD_INT 1
23525: PPUSH
23526: LD_VAR 0 1
23530: PPUSH
23531: CALL_OW 12
23535: ST_TO_ADDR
// pom := list [ n ] ;
23536: LD_ADDR_VAR 0 4
23540: PUSH
23541: LD_VAR 0 1
23545: PUSH
23546: LD_VAR 0 6
23550: ARRAY
23551: ST_TO_ADDR
// list := Delete ( list , n ) ;
23552: LD_ADDR_VAR 0 1
23556: PUSH
23557: LD_VAR 0 1
23561: PPUSH
23562: LD_VAR 0 6
23566: PPUSH
23567: CALL_OW 3
23571: ST_TO_ADDR
// vysledek := vysledek ^ pom ;
23572: LD_ADDR_VAR 0 3
23576: PUSH
23577: LD_VAR 0 3
23581: PUSH
23582: LD_VAR 0 4
23586: ADD
23587: ST_TO_ADDR
// end ;
23588: GO 23515
23590: POP
23591: POP
// result := vysledek ;
23592: LD_ADDR_VAR 0 2
23596: PUSH
23597: LD_VAR 0 3
23601: ST_TO_ADDR
// end ;
23602: LD_VAR 0 2
23606: RET
// function GetBasicTechnology ; var list , un , vysledek ; begin
23607: LD_INT 0
23609: PPUSH
23610: PPUSH
23611: PPUSH
23612: PPUSH
// list := [ ] ;
23613: LD_ADDR_VAR 0 2
23617: PUSH
23618: EMPTY
23619: ST_TO_ADDR
// for un in basic_tech do
23620: LD_ADDR_VAR 0 3
23624: PUSH
23625: LD_LOC 43
23629: PUSH
23630: FOR_IN
23631: IFFALSE 23660
// if un then
23633: LD_VAR 0 3
23637: IFFALSE 23658
// list := list ^ [ un ] ;
23639: LD_ADDR_VAR 0 2
23643: PUSH
23644: LD_VAR 0 2
23648: PUSH
23649: LD_VAR 0 3
23653: PUSH
23654: EMPTY
23655: LIST
23656: ADD
23657: ST_TO_ADDR
23658: GO 23630
23660: POP
23661: POP
// if list > 1 then
23662: LD_VAR 0 2
23666: PUSH
23667: LD_INT 1
23669: GREATER
23670: IFFALSE 23687
// vysledek := shake_it_baby ( list ) ;
23672: LD_ADDR_VAR 0 4
23676: PUSH
23677: LD_VAR 0 2
23681: PPUSH
23682: CALL 23486 0 1
23686: ST_TO_ADDR
// result := vysledek ;
23687: LD_ADDR_VAR 0 1
23691: PUSH
23692: LD_VAR 0 4
23696: ST_TO_ADDR
// end ;
23697: LD_VAR 0 1
23701: RET
// function GetUpgradeTechnology ; var list , un , vysledek ; begin
23702: LD_INT 0
23704: PPUSH
23705: PPUSH
23706: PPUSH
23707: PPUSH
// vysledek := [ ] ;
23708: LD_ADDR_VAR 0 4
23712: PUSH
23713: EMPTY
23714: ST_TO_ADDR
// list := [ ] ;
23715: LD_ADDR_VAR 0 2
23719: PUSH
23720: EMPTY
23721: ST_TO_ADDR
// for un in upgrade_tech do
23722: LD_ADDR_VAR 0 3
23726: PUSH
23727: LD_LOC 44
23731: PUSH
23732: FOR_IN
23733: IFFALSE 23762
// if un then
23735: LD_VAR 0 3
23739: IFFALSE 23760
// list := list ^ [ un ] ;
23741: LD_ADDR_VAR 0 2
23745: PUSH
23746: LD_VAR 0 2
23750: PUSH
23751: LD_VAR 0 3
23755: PUSH
23756: EMPTY
23757: LIST
23758: ADD
23759: ST_TO_ADDR
23760: GO 23732
23762: POP
23763: POP
// vysledek := shake_it_baby ( list ) ;
23764: LD_ADDR_VAR 0 4
23768: PUSH
23769: LD_VAR 0 2
23773: PPUSH
23774: CALL 23486 0 1
23778: ST_TO_ADDR
// result := vysledek ;
23779: LD_ADDR_VAR 0 1
23783: PUSH
23784: LD_VAR 0 4
23788: ST_TO_ADDR
// end ;
23789: LD_VAR 0 1
23793: RET
// function select_next_technology ( side , possible ) ; var un , pom , new , vysledek , select ; begin
23794: LD_INT 0
23796: PPUSH
23797: PPUSH
23798: PPUSH
23799: PPUSH
23800: PPUSH
23801: PPUSH
// new := true ;
23802: LD_ADDR_VAR 0 6
23806: PUSH
23807: LD_INT 1
23809: ST_TO_ADDR
// vysledek := [ ] ;
23810: LD_ADDR_VAR 0 7
23814: PUSH
23815: EMPTY
23816: ST_TO_ADDR
// select := [ ] ;
23817: LD_ADDR_VAR 0 8
23821: PUSH
23822: EMPTY
23823: ST_TO_ADDR
// for un in first_technology do
23824: LD_ADDR_VAR 0 4
23828: PUSH
23829: LD_LOC 45
23833: PUSH
23834: FOR_IN
23835: IFFALSE 23877
// begin pom := research_possible ( side , un ) ;
23837: LD_ADDR_VAR 0 5
23841: PUSH
23842: LD_VAR 0 1
23846: PPUSH
23847: LD_VAR 0 4
23851: PPUSH
23852: CALL 24353 0 2
23856: ST_TO_ADDR
// if pom then
23857: LD_VAR 0 5
23861: IFFALSE 23875
// begin vysledek := un ;
23863: LD_ADDR_VAR 0 7
23867: PUSH
23868: LD_VAR 0 4
23872: ST_TO_ADDR
// break ;
23873: GO 23877
// end ; end ;
23875: GO 23834
23877: POP
23878: POP
// if not first_technology then
23879: LD_LOC 45
23883: NOT
23884: IFFALSE 23894
// new := false ;
23886: LD_ADDR_VAR 0 6
23890: PUSH
23891: LD_INT 0
23893: ST_TO_ADDR
// if not vysledek and ( Rand ( 0 , 10 ) < 3 ) then
23894: LD_VAR 0 7
23898: NOT
23899: PUSH
23900: LD_INT 0
23902: PPUSH
23903: LD_INT 10
23905: PPUSH
23906: CALL_OW 12
23910: PUSH
23911: LD_INT 3
23913: LESS
23914: AND
23915: IFFALSE 23972
// for un in recomended_technology do
23917: LD_ADDR_VAR 0 4
23921: PUSH
23922: LD_LOC 47
23926: PUSH
23927: FOR_IN
23928: IFFALSE 23970
// begin pom := research_possible ( side , un ) ;
23930: LD_ADDR_VAR 0 5
23934: PUSH
23935: LD_VAR 0 1
23939: PPUSH
23940: LD_VAR 0 4
23944: PPUSH
23945: CALL 24353 0 2
23949: ST_TO_ADDR
// if pom then
23950: LD_VAR 0 5
23954: IFFALSE 23968
// begin vysledek := un ;
23956: LD_ADDR_VAR 0 7
23960: PUSH
23961: LD_VAR 0 4
23965: ST_TO_ADDR
// break ;
23966: GO 23970
// end ; end ;
23968: GO 23927
23970: POP
23971: POP
// if not recomended_technology then
23972: LD_LOC 47
23976: NOT
23977: IFFALSE 23987
// new := false ;
23979: LD_ADDR_VAR 0 6
23983: PUSH
23984: LD_INT 0
23986: ST_TO_ADDR
// if not vysledek then
23987: LD_VAR 0 7
23991: NOT
23992: IFFALSE 24079
// begin select := GetBasicTechnology ;
23994: LD_ADDR_VAR 0 8
23998: PUSH
23999: CALL 23607 0 0
24003: ST_TO_ADDR
// for un in select do
24004: LD_ADDR_VAR 0 4
24008: PUSH
24009: LD_VAR 0 8
24013: PUSH
24014: FOR_IN
24015: IFFALSE 24077
// begin pom := [ ] ;
24017: LD_ADDR_VAR 0 5
24021: PUSH
24022: EMPTY
24023: ST_TO_ADDR
// if not un in last_technology then
24024: LD_VAR 0 4
24028: PUSH
24029: LD_LOC 46
24033: IN
24034: NOT
24035: IFFALSE 24057
// pom := research_possible ( side , un ) ;
24037: LD_ADDR_VAR 0 5
24041: PUSH
24042: LD_VAR 0 1
24046: PPUSH
24047: LD_VAR 0 4
24051: PPUSH
24052: CALL 24353 0 2
24056: ST_TO_ADDR
// if pom then
24057: LD_VAR 0 5
24061: IFFALSE 24075
// begin vysledek := un ;
24063: LD_ADDR_VAR 0 7
24067: PUSH
24068: LD_VAR 0 4
24072: ST_TO_ADDR
// break ;
24073: GO 24077
// end ; end ;
24075: GO 24014
24077: POP
24078: POP
// end ; if not select then
24079: LD_VAR 0 8
24083: NOT
24084: IFFALSE 24094
// new := false ;
24086: LD_ADDR_VAR 0 6
24090: PUSH
24091: LD_INT 0
24093: ST_TO_ADDR
// if not vysledek then
24094: LD_VAR 0 7
24098: NOT
24099: IFFALSE 24186
// begin select := GetUpgradeTechnology ;
24101: LD_ADDR_VAR 0 8
24105: PUSH
24106: CALL 23702 0 0
24110: ST_TO_ADDR
// for un in select do
24111: LD_ADDR_VAR 0 4
24115: PUSH
24116: LD_VAR 0 8
24120: PUSH
24121: FOR_IN
24122: IFFALSE 24184
// begin pom := [ ] ;
24124: LD_ADDR_VAR 0 5
24128: PUSH
24129: EMPTY
24130: ST_TO_ADDR
// if not un in last_technology then
24131: LD_VAR 0 4
24135: PUSH
24136: LD_LOC 46
24140: IN
24141: NOT
24142: IFFALSE 24164
// pom := research_possible ( side , un ) ;
24144: LD_ADDR_VAR 0 5
24148: PUSH
24149: LD_VAR 0 1
24153: PPUSH
24154: LD_VAR 0 4
24158: PPUSH
24159: CALL 24353 0 2
24163: ST_TO_ADDR
// if pom then
24164: LD_VAR 0 5
24168: IFFALSE 24182
// begin vysledek := un ;
24170: LD_ADDR_VAR 0 7
24174: PUSH
24175: LD_VAR 0 4
24179: ST_TO_ADDR
// break ;
24180: GO 24184
// end ; end ;
24182: GO 24121
24184: POP
24185: POP
// end ; if not select then
24186: LD_VAR 0 8
24190: NOT
24191: IFFALSE 24201
// new := false ;
24193: LD_ADDR_VAR 0 6
24197: PUSH
24198: LD_INT 0
24200: ST_TO_ADDR
// if not vysledek then
24201: LD_VAR 0 7
24205: NOT
24206: IFFALSE 24263
// for un in last_technology do
24208: LD_ADDR_VAR 0 4
24212: PUSH
24213: LD_LOC 46
24217: PUSH
24218: FOR_IN
24219: IFFALSE 24261
// begin pom := research_possible ( side , un ) ;
24221: LD_ADDR_VAR 0 5
24225: PUSH
24226: LD_VAR 0 1
24230: PPUSH
24231: LD_VAR 0 4
24235: PPUSH
24236: CALL 24353 0 2
24240: ST_TO_ADDR
// if pom then
24241: LD_VAR 0 5
24245: IFFALSE 24259
// begin vysledek := un ;
24247: LD_ADDR_VAR 0 7
24251: PUSH
24252: LD_VAR 0 4
24256: ST_TO_ADDR
// break ;
24257: GO 24261
// end ; end ;
24259: GO 24218
24261: POP
24262: POP
// if not last_technology then
24263: LD_LOC 46
24267: NOT
24268: IFFALSE 24278
// new := false ;
24270: LD_ADDR_VAR 0 6
24274: PUSH
24275: LD_INT 0
24277: ST_TO_ADDR
// if not ( vysledek or new ) then
24278: LD_VAR 0 7
24282: PUSH
24283: LD_VAR 0 6
24287: OR
24288: NOT
24289: IFFALSE 24338
// begin all_invented := Insert ( all_invented , side , true ) ;
24291: LD_ADDR_LOC 48
24295: PUSH
24296: LD_LOC 48
24300: PPUSH
24301: LD_VAR 0 1
24305: PPUSH
24306: LD_INT 1
24308: PPUSH
24309: CALL_OW 2
24313: ST_TO_ADDR
// all_invented := Delete ( all_invented , side + 1 ) ;
24314: LD_ADDR_LOC 48
24318: PUSH
24319: LD_LOC 48
24323: PPUSH
24324: LD_VAR 0 1
24328: PUSH
24329: LD_INT 1
24331: PLUS
24332: PPUSH
24333: CALL_OW 3
24337: ST_TO_ADDR
// end ; result := vysledek ;
24338: LD_ADDR_VAR 0 3
24342: PUSH
24343: LD_VAR 0 7
24347: ST_TO_ADDR
// end ;
24348: LD_VAR 0 3
24352: RET
// function research_possible ( side , tech ) ; var un , vysledek , lab_list ; begin
24353: LD_INT 0
24355: PPUSH
24356: PPUSH
24357: PPUSH
24358: PPUSH
// lab_list := get_labs ( side ) ;
24359: LD_ADDR_VAR 0 6
24363: PUSH
24364: LD_VAR 0 1
24368: PPUSH
24369: CALL 23123 0 1
24373: ST_TO_ADDR
// if GetTech ( tech , side ) in [ state_disabled , state_researched ] then
24374: LD_VAR 0 2
24378: PPUSH
24379: LD_VAR 0 1
24383: PPUSH
24384: CALL_OW 321
24388: PUSH
24389: LD_INT 0
24391: PUSH
24392: LD_INT 2
24394: PUSH
24395: EMPTY
24396: LIST
24397: LIST
24398: IN
24399: IFFALSE 24410
// vysledek := [ ] else
24401: LD_ADDR_VAR 0 5
24405: PUSH
24406: EMPTY
24407: ST_TO_ADDR
24408: GO 24459
// for un in lab_list do
24410: LD_ADDR_VAR 0 4
24414: PUSH
24415: LD_VAR 0 6
24419: PUSH
24420: FOR_IN
24421: IFFALSE 24457
// if CanBeResearched ( un , tech ) then
24423: LD_VAR 0 4
24427: PPUSH
24428: LD_VAR 0 2
24432: PPUSH
24433: CALL_OW 430
24437: IFFALSE 24455
// vysledek := vysledek ^ un ;
24439: LD_ADDR_VAR 0 5
24443: PUSH
24444: LD_VAR 0 5
24448: PUSH
24449: LD_VAR 0 4
24453: ADD
24454: ST_TO_ADDR
24455: GO 24420
24457: POP
24458: POP
// result := vysledek ;
24459: LD_ADDR_VAR 0 3
24463: PUSH
24464: LD_VAR 0 5
24468: ST_TO_ADDR
// end ;
24469: LD_VAR 0 3
24473: RET
// function transfer_scientistic ( scients , to_lab ) ; var un , i ; begin
24474: LD_INT 0
24476: PPUSH
24477: PPUSH
24478: PPUSH
// i = 1 ;
24479: LD_ADDR_VAR 0 5
24483: PUSH
24484: LD_INT 1
24486: ST_TO_ADDR
// to_lab := to_lab diff [ 0 ] ;
24487: LD_ADDR_VAR 0 2
24491: PUSH
24492: LD_VAR 0 2
24496: PUSH
24497: LD_INT 0
24499: PUSH
24500: EMPTY
24501: LIST
24502: DIFF
24503: ST_TO_ADDR
// for un in scients do
24504: LD_ADDR_VAR 0 4
24508: PUSH
24509: LD_VAR 0 1
24513: PUSH
24514: FOR_IN
24515: IFFALSE 24563
// begin ComEnterUnit ( un , to_lab [ ( i mod to_lab ) + 1 ] ) ;
24517: LD_VAR 0 4
24521: PPUSH
24522: LD_VAR 0 2
24526: PUSH
24527: LD_VAR 0 5
24531: PUSH
24532: LD_VAR 0 2
24536: MOD
24537: PUSH
24538: LD_INT 1
24540: PLUS
24541: ARRAY
24542: PPUSH
24543: CALL_OW 120
// i := i + 1 ;
24547: LD_ADDR_VAR 0 5
24551: PUSH
24552: LD_VAR 0 5
24556: PUSH
24557: LD_INT 1
24559: PLUS
24560: ST_TO_ADDR
// end ;
24561: GO 24514
24563: POP
24564: POP
// AddComChangeProfession ( scients , class_scientistic ) ;
24565: LD_VAR 0 1
24569: PPUSH
24570: LD_INT 4
24572: PPUSH
24573: CALL_OW 183
// end ;
24577: LD_VAR 0 3
24581: RET
// function begin_of_research ( lab , to_research ) ; begin
24582: LD_INT 0
24584: PPUSH
// ComResearch ( lab , to_research ) ;
24585: LD_VAR 0 1
24589: PPUSH
24590: LD_VAR 0 2
24594: PPUSH
24595: CALL_OW 124
// end ; end_of_file
24599: LD_VAR 0 3
24603: RET
// export reserved_people ; var vysledek ; export function init_distribution ; var un ; begin
24604: LD_INT 0
24606: PPUSH
24607: PPUSH
// reserved_people := [ ] ;
24608: LD_ADDR_EXP 68
24612: PUSH
24613: EMPTY
24614: ST_TO_ADDR
// for un = 1 to 8 do
24615: LD_ADDR_VAR 0 2
24619: PUSH
24620: DOUBLE
24621: LD_INT 1
24623: DEC
24624: ST_TO_ADDR
24625: LD_INT 8
24627: PUSH
24628: FOR_TO
24629: IFFALSE 24649
// reserved_people := reserved_people ^ [ [ ] ] ;
24631: LD_ADDR_EXP 68
24635: PUSH
24636: LD_EXP 68
24640: PUSH
24641: EMPTY
24642: PUSH
24643: EMPTY
24644: LIST
24645: ADD
24646: ST_TO_ADDR
24647: GO 24628
24649: POP
24650: POP
// end ;
24651: LD_VAR 0 1
24655: RET
// export function request_people ( side , man_class , priority ) ; begin
24656: LD_INT 0
24658: PPUSH
// vysledek := FilterAllUnits ( [ [ f_side , side ] , [ f_class , man_class ] ] ) diff reserved_people [ side ] ;
24659: LD_ADDR_LOC 49
24663: PUSH
24664: LD_INT 22
24666: PUSH
24667: LD_VAR 0 1
24671: PUSH
24672: EMPTY
24673: LIST
24674: LIST
24675: PUSH
24676: LD_INT 25
24678: PUSH
24679: LD_VAR 0 2
24683: PUSH
24684: EMPTY
24685: LIST
24686: LIST
24687: PUSH
24688: EMPTY
24689: LIST
24690: LIST
24691: PPUSH
24692: CALL_OW 69
24696: PUSH
24697: LD_EXP 68
24701: PUSH
24702: LD_VAR 0 1
24706: ARRAY
24707: DIFF
24708: ST_TO_ADDR
// result := vysledek ;
24709: LD_ADDR_VAR 0 4
24713: PUSH
24714: LD_LOC 49
24718: ST_TO_ADDR
// end ;
24719: LD_VAR 0 4
24723: RET
// export function GetCPUNation ( side ) ; var un , vysledek ; begin
24724: LD_INT 0
24726: PPUSH
24727: PPUSH
24728: PPUSH
// un := FilterAllUnits ( [ [ f_side , side ] ] ) ;
24729: LD_ADDR_VAR 0 3
24733: PUSH
24734: LD_INT 22
24736: PUSH
24737: LD_VAR 0 1
24741: PUSH
24742: EMPTY
24743: LIST
24744: LIST
24745: PUSH
24746: EMPTY
24747: LIST
24748: PPUSH
24749: CALL_OW 69
24753: ST_TO_ADDR
// if un then
24754: LD_VAR 0 3
24758: IFFALSE 24781
// vysledek := GetSide ( un [ 1 ] ) else
24760: LD_ADDR_VAR 0 4
24764: PUSH
24765: LD_VAR 0 3
24769: PUSH
24770: LD_INT 1
24772: ARRAY
24773: PPUSH
24774: CALL_OW 255
24778: ST_TO_ADDR
24779: GO 24789
// vysledek := false ;
24781: LD_ADDR_VAR 0 4
24785: PUSH
24786: LD_INT 0
24788: ST_TO_ADDR
// result := vysledek ;
24789: LD_ADDR_VAR 0 2
24793: PUSH
24794: LD_VAR 0 4
24798: ST_TO_ADDR
// end ; end_of_file
24799: LD_VAR 0 2
24803: RET
// var us_weapons , ar_weapons , ru_weapons ; var sib_engine , oil_engine ; var prefered ; var main_extensions ; var hovers_recomended , flat_land ; export mechanics_wanted , extension_wanted ; function init_priority ( side , side_nation ) ; var us_main_control ; begin
24804: LD_INT 0
24806: PPUSH
24807: PPUSH
// us_main_control := b_ext_computer ;
24808: LD_ADDR_VAR 0 4
24812: PUSH
24813: LD_INT 24
24815: ST_TO_ADDR
// prefered_control := control_computer ;
24816: LD_ADDR_EXP 58
24820: PUSH
24821: LD_INT 3
24823: ST_TO_ADDR
// case side_nation of 1 :
24824: LD_VAR 0 2
24828: PUSH
24829: LD_INT 1
24831: DOUBLE
24832: EQUAL
24833: IFTRUE 24837
24835: GO 24869
24837: POP
// main_extensions := [ b_ext_track , b_ext_siberium , b_ext_laser , b_ext_rocket , us_main_control ] ; 2 :
24838: LD_ADDR_LOC 56
24842: PUSH
24843: LD_INT 16
24845: PUSH
24846: LD_INT 21
24848: PUSH
24849: LD_INT 25
24851: PUSH
24852: LD_INT 18
24854: PUSH
24855: LD_VAR 0 4
24859: PUSH
24860: EMPTY
24861: LIST
24862: LIST
24863: LIST
24864: LIST
24865: LIST
24866: ST_TO_ADDR
24867: GO 24946
24869: LD_INT 2
24871: DOUBLE
24872: EQUAL
24873: IFTRUE 24877
24875: GO 24907
24877: POP
// main_extensions := [ b_ext_track , b_ext_gun , b_ext_rocket , b_ext_radar , b_ext_siberium ] ; 3 :
24878: LD_ADDR_LOC 56
24882: PUSH
24883: LD_INT 16
24885: PUSH
24886: LD_INT 17
24888: PUSH
24889: LD_INT 18
24891: PUSH
24892: LD_INT 20
24894: PUSH
24895: LD_INT 21
24897: PUSH
24898: EMPTY
24899: LIST
24900: LIST
24901: LIST
24902: LIST
24903: LIST
24904: ST_TO_ADDR
24905: GO 24946
24907: LD_INT 3
24909: DOUBLE
24910: EQUAL
24911: IFTRUE 24915
24913: GO 24945
24915: POP
// main_extensions := [ b_ext_track , b_ext_gun , b_ext_rocket , b_ext_computer , b_ext_siberium ] ; end ;
24916: LD_ADDR_LOC 56
24920: PUSH
24921: LD_INT 16
24923: PUSH
24924: LD_INT 17
24926: PUSH
24927: LD_INT 18
24929: PUSH
24930: LD_INT 24
24932: PUSH
24933: LD_INT 21
24935: PUSH
24936: EMPTY
24937: LIST
24938: LIST
24939: LIST
24940: LIST
24941: LIST
24942: ST_TO_ADDR
24943: GO 24946
24945: POP
// end ;
24946: LD_VAR 0 3
24950: RET
// export function init_manufacture ; begin
24951: LD_INT 0
24953: PPUSH
// hovers_recomended := false ;
24954: LD_ADDR_LOC 57
24958: PUSH
24959: LD_INT 0
24961: ST_TO_ADDR
// flat_land := false ;
24962: LD_ADDR_LOC 58
24966: PUSH
24967: LD_INT 0
24969: ST_TO_ADDR
// sib_engine := 10 ;
24970: LD_ADDR_LOC 53
24974: PUSH
24975: LD_INT 10
24977: ST_TO_ADDR
// oil_engine := 30 ;
24978: LD_ADDR_LOC 54
24982: PUSH
24983: LD_INT 30
24985: ST_TO_ADDR
// us_weapons := [ [ [ us_machine_gun , [ ] , 0 ] , [ us_light_gun , [ tech_Gun ] , b_ext_gun ] , [ us_radar , [ tech_Radar ] , b_ext_radar ] , [ us_crane , [ ] , b_ext_noncombat ] ] , [ [ us_gatling_gun , [ tech_Gatling ] , 0 ] , [ us_double_gun , [ tech_Gun ] , b_ext_gun ] , [ us_rocket_launcher , [ tech_Rocket ] , b_ext_rocket ] , [ us_laser , [ tech_Laser ] , b_ext_laser ] , [ us_cargo_bay , [ ] , b_ext_noncombat ] ] , [ [ us_bulldozer , [ ] , b_ext_noncombat ] , [ us_siberium_rocket , [ tech_SibEng , tech_Rocket ] , b_ext_siberium ] , [ us_heavy_gun , [ tech_AdvMet ] , b_ext_gun ] ] ] ;
24986: LD_ADDR_LOC 50
24990: PUSH
24991: LD_INT 2
24993: PUSH
24994: EMPTY
24995: PUSH
24996: LD_INT 0
24998: PUSH
24999: EMPTY
25000: LIST
25001: LIST
25002: LIST
25003: PUSH
25004: LD_INT 3
25006: PUSH
25007: LD_INT 39
25009: PUSH
25010: EMPTY
25011: LIST
25012: PUSH
25013: LD_INT 17
25015: PUSH
25016: EMPTY
25017: LIST
25018: LIST
25019: LIST
25020: PUSH
25021: LD_INT 11
25023: PUSH
25024: LD_INT 6
25026: PUSH
25027: EMPTY
25028: LIST
25029: PUSH
25030: LD_INT 20
25032: PUSH
25033: EMPTY
25034: LIST
25035: LIST
25036: LIST
25037: PUSH
25038: LD_INT 13
25040: PUSH
25041: EMPTY
25042: PUSH
25043: LD_INT 19
25045: PUSH
25046: EMPTY
25047: LIST
25048: LIST
25049: LIST
25050: PUSH
25051: EMPTY
25052: LIST
25053: LIST
25054: LIST
25055: LIST
25056: PUSH
25057: LD_INT 4
25059: PUSH
25060: LD_INT 69
25062: PUSH
25063: EMPTY
25064: LIST
25065: PUSH
25066: LD_INT 0
25068: PUSH
25069: EMPTY
25070: LIST
25071: LIST
25072: LIST
25073: PUSH
25074: LD_INT 5
25076: PUSH
25077: LD_INT 39
25079: PUSH
25080: EMPTY
25081: LIST
25082: PUSH
25083: LD_INT 17
25085: PUSH
25086: EMPTY
25087: LIST
25088: LIST
25089: LIST
25090: PUSH
25091: LD_INT 7
25093: PUSH
25094: LD_INT 40
25096: PUSH
25097: EMPTY
25098: LIST
25099: PUSH
25100: LD_INT 18
25102: PUSH
25103: EMPTY
25104: LIST
25105: LIST
25106: LIST
25107: PUSH
25108: LD_INT 9
25110: PUSH
25111: LD_INT 10
25113: PUSH
25114: EMPTY
25115: LIST
25116: PUSH
25117: LD_INT 25
25119: PUSH
25120: EMPTY
25121: LIST
25122: LIST
25123: LIST
25124: PUSH
25125: LD_INT 12
25127: PUSH
25128: EMPTY
25129: PUSH
25130: LD_INT 19
25132: PUSH
25133: EMPTY
25134: LIST
25135: LIST
25136: LIST
25137: PUSH
25138: EMPTY
25139: LIST
25140: LIST
25141: LIST
25142: LIST
25143: LIST
25144: PUSH
25145: LD_INT 14
25147: PUSH
25148: EMPTY
25149: PUSH
25150: LD_INT 19
25152: PUSH
25153: EMPTY
25154: LIST
25155: LIST
25156: LIST
25157: PUSH
25158: LD_INT 8
25160: PUSH
25161: LD_INT 22
25163: PUSH
25164: LD_INT 40
25166: PUSH
25167: EMPTY
25168: LIST
25169: LIST
25170: PUSH
25171: LD_INT 21
25173: PUSH
25174: EMPTY
25175: LIST
25176: LIST
25177: LIST
25178: PUSH
25179: LD_INT 6
25181: PUSH
25182: LD_INT 34
25184: PUSH
25185: EMPTY
25186: LIST
25187: PUSH
25188: LD_INT 17
25190: PUSH
25191: EMPTY
25192: LIST
25193: LIST
25194: LIST
25195: PUSH
25196: EMPTY
25197: LIST
25198: LIST
25199: LIST
25200: PUSH
25201: EMPTY
25202: LIST
25203: LIST
25204: LIST
25205: ST_TO_ADDR
// ar_weapons := [ [ [ ar_multimissile_ballista , [ ] , 0 ] , [ ar_double_machine_gun , [ ] , 0 ] , [ ar_light_gun , [ tech_Gun ] , b_ext_gun ] ] , [ [ ar_gatling_gun , [ tech_Gatling ] , 0 ] , [ ar_flame_thrower , [ tech_Flame ] , b_ext_stitch ] , [ ar_gun , [ tech_Gun ] , b_ext_gun ] , [ ar_rocket_launcher , [ tech_Rocket ] , b_ext_rocket ] , [ ar_selfpropelled_bomb , [ tech_Explos ] , b_ext_siberium ] , [ ar_radar , [ tech_Radar ] , b_ext_radar ] , [ ar_control_tower , [ tech_RemCont ] , b_ext_radar ] , [ ar_cargo_bay , [ ] , b_ext_stitch ] ] , [ ] ] ;
25206: LD_ADDR_LOC 51
25210: PUSH
25211: LD_INT 22
25213: PUSH
25214: EMPTY
25215: PUSH
25216: LD_INT 0
25218: PUSH
25219: EMPTY
25220: LIST
25221: LIST
25222: LIST
25223: PUSH
25224: LD_INT 24
25226: PUSH
25227: EMPTY
25228: PUSH
25229: LD_INT 0
25231: PUSH
25232: EMPTY
25233: LIST
25234: LIST
25235: LIST
25236: PUSH
25237: LD_INT 23
25239: PUSH
25240: LD_INT 39
25242: PUSH
25243: EMPTY
25244: LIST
25245: PUSH
25246: LD_INT 17
25248: PUSH
25249: EMPTY
25250: LIST
25251: LIST
25252: LIST
25253: PUSH
25254: EMPTY
25255: LIST
25256: LIST
25257: LIST
25258: PUSH
25259: LD_INT 25
25261: PUSH
25262: LD_INT 69
25264: PUSH
25265: EMPTY
25266: LIST
25267: PUSH
25268: LD_INT 0
25270: PUSH
25271: EMPTY
25272: LIST
25273: LIST
25274: LIST
25275: PUSH
25276: LD_INT 26
25278: PUSH
25279: LD_INT 70
25281: PUSH
25282: EMPTY
25283: LIST
25284: PUSH
25285: LD_INT 23
25287: PUSH
25288: EMPTY
25289: LIST
25290: LIST
25291: LIST
25292: PUSH
25293: LD_INT 27
25295: PUSH
25296: LD_INT 39
25298: PUSH
25299: EMPTY
25300: LIST
25301: PUSH
25302: LD_INT 17
25304: PUSH
25305: EMPTY
25306: LIST
25307: LIST
25308: LIST
25309: PUSH
25310: LD_INT 28
25312: PUSH
25313: LD_INT 40
25315: PUSH
25316: EMPTY
25317: LIST
25318: PUSH
25319: LD_INT 18
25321: PUSH
25322: EMPTY
25323: LIST
25324: LIST
25325: LIST
25326: PUSH
25327: LD_INT 29
25329: PUSH
25330: LD_INT 42
25332: PUSH
25333: EMPTY
25334: LIST
25335: PUSH
25336: LD_INT 21
25338: PUSH
25339: EMPTY
25340: LIST
25341: LIST
25342: LIST
25343: PUSH
25344: LD_INT 30
25346: PUSH
25347: LD_INT 6
25349: PUSH
25350: EMPTY
25351: LIST
25352: PUSH
25353: LD_INT 20
25355: PUSH
25356: EMPTY
25357: LIST
25358: LIST
25359: LIST
25360: PUSH
25361: LD_INT 31
25363: PUSH
25364: LD_INT 15
25366: PUSH
25367: EMPTY
25368: LIST
25369: PUSH
25370: LD_INT 20
25372: PUSH
25373: EMPTY
25374: LIST
25375: LIST
25376: LIST
25377: PUSH
25378: LD_INT 32
25380: PUSH
25381: EMPTY
25382: PUSH
25383: LD_INT 23
25385: PUSH
25386: EMPTY
25387: LIST
25388: LIST
25389: LIST
25390: PUSH
25391: EMPTY
25392: LIST
25393: LIST
25394: LIST
25395: LIST
25396: LIST
25397: LIST
25398: LIST
25399: LIST
25400: PUSH
25401: EMPTY
25402: PUSH
25403: EMPTY
25404: LIST
25405: LIST
25406: LIST
25407: ST_TO_ADDR
// ru_weapons := [ [ ] , [ [ ru_heavy_machine_gun , [ ] , 0 ] , [ ru_gatling_gun , [ tech_Gatling ] , 0 ] , [ ru_gun , [ tech_Gun ] , b_ext_gun ] , [ ru_rocket_launcher , [ tech_Rocket ] , b_ext_rocket ] , [ ru_cargo_bay , [ ] , b_ext_noncombat ] ] , [ [ ru_heavy_gun , [ tech_AdvMet ] , b_ext_gun ] , [ ru_rocket , [ tech_AdvRocket ] , b_ext_rocket ] , [ ru_siberium_rocket , [ tech_SibEng , tech_SibFiss ] , b_ext_siberium ] , [ ru_time_lapser , [ tech_Lapser ] , b_ext_siberium ] , [ ru_bulldozer , [ ] , b_ext_noncombat ] ] ] ;
25408: LD_ADDR_LOC 52
25412: PUSH
25413: EMPTY
25414: PUSH
25415: LD_INT 42
25417: PUSH
25418: EMPTY
25419: PUSH
25420: LD_INT 0
25422: PUSH
25423: EMPTY
25424: LIST
25425: LIST
25426: LIST
25427: PUSH
25428: LD_INT 43
25430: PUSH
25431: LD_INT 69
25433: PUSH
25434: EMPTY
25435: LIST
25436: PUSH
25437: LD_INT 0
25439: PUSH
25440: EMPTY
25441: LIST
25442: LIST
25443: LIST
25444: PUSH
25445: LD_INT 44
25447: PUSH
25448: LD_INT 39
25450: PUSH
25451: EMPTY
25452: LIST
25453: PUSH
25454: LD_INT 17
25456: PUSH
25457: EMPTY
25458: LIST
25459: LIST
25460: LIST
25461: PUSH
25462: LD_INT 45
25464: PUSH
25465: LD_INT 40
25467: PUSH
25468: EMPTY
25469: LIST
25470: PUSH
25471: LD_INT 18
25473: PUSH
25474: EMPTY
25475: LIST
25476: LIST
25477: LIST
25478: PUSH
25479: LD_INT 51
25481: PUSH
25482: EMPTY
25483: PUSH
25484: LD_INT 19
25486: PUSH
25487: EMPTY
25488: LIST
25489: LIST
25490: LIST
25491: PUSH
25492: EMPTY
25493: LIST
25494: LIST
25495: LIST
25496: LIST
25497: LIST
25498: PUSH
25499: LD_INT 46
25501: PUSH
25502: LD_INT 34
25504: PUSH
25505: EMPTY
25506: LIST
25507: PUSH
25508: LD_INT 17
25510: PUSH
25511: EMPTY
25512: LIST
25513: LIST
25514: LIST
25515: PUSH
25516: LD_INT 47
25518: PUSH
25519: LD_INT 71
25521: PUSH
25522: EMPTY
25523: LIST
25524: PUSH
25525: LD_INT 18
25527: PUSH
25528: EMPTY
25529: LIST
25530: LIST
25531: LIST
25532: PUSH
25533: LD_INT 48
25535: PUSH
25536: LD_INT 22
25538: PUSH
25539: LD_INT 25
25541: PUSH
25542: EMPTY
25543: LIST
25544: LIST
25545: PUSH
25546: LD_INT 21
25548: PUSH
25549: EMPTY
25550: LIST
25551: LIST
25552: LIST
25553: PUSH
25554: LD_INT 49
25556: PUSH
25557: LD_INT 31
25559: PUSH
25560: EMPTY
25561: LIST
25562: PUSH
25563: LD_INT 21
25565: PUSH
25566: EMPTY
25567: LIST
25568: LIST
25569: LIST
25570: PUSH
25571: LD_INT 53
25573: PUSH
25574: EMPTY
25575: PUSH
25576: LD_INT 19
25578: PUSH
25579: EMPTY
25580: LIST
25581: LIST
25582: LIST
25583: PUSH
25584: EMPTY
25585: LIST
25586: LIST
25587: LIST
25588: LIST
25589: LIST
25590: PUSH
25591: EMPTY
25592: LIST
25593: LIST
25594: LIST
25595: ST_TO_ADDR
// end ;
25596: LD_VAR 0 1
25600: RET
// function init_prefered_vehicles ( side_nation ) ; begin
25601: LD_INT 0
25603: PPUSH
// case side_nation of 1 :
25604: LD_VAR 0 1
25608: PUSH
25609: LD_INT 1
25611: DOUBLE
25612: EQUAL
25613: IFTRUE 25617
25615: GO 25684
25617: POP
// prefered := [ [ us_medium_wheeled , 0 , control_remote , us_laser ] , [ us_morphling , 0 , control_remote , us_heavy_gun ] , [ us_morphling , 0 , control_remote , us_rocket_launcher ] ] ; 2 :
25618: LD_ADDR_LOC 55
25622: PUSH
25623: LD_INT 2
25625: PUSH
25626: LD_INT 0
25628: PUSH
25629: LD_INT 2
25631: PUSH
25632: LD_INT 9
25634: PUSH
25635: EMPTY
25636: LIST
25637: LIST
25638: LIST
25639: LIST
25640: PUSH
25641: LD_INT 5
25643: PUSH
25644: LD_INT 0
25646: PUSH
25647: LD_INT 2
25649: PUSH
25650: LD_INT 6
25652: PUSH
25653: EMPTY
25654: LIST
25655: LIST
25656: LIST
25657: LIST
25658: PUSH
25659: LD_INT 5
25661: PUSH
25662: LD_INT 0
25664: PUSH
25665: LD_INT 2
25667: PUSH
25668: LD_INT 7
25670: PUSH
25671: EMPTY
25672: LIST
25673: LIST
25674: LIST
25675: LIST
25676: PUSH
25677: EMPTY
25678: LIST
25679: LIST
25680: LIST
25681: ST_TO_ADDR
25682: GO 25816
25684: LD_INT 2
25686: DOUBLE
25687: EQUAL
25688: IFTRUE 25692
25690: GO 25759
25692: POP
// prefered := [ [ ar_medium_trike , 0 , control_remote , ar_rocket_launcher ] , [ ar_medium_trike , engine_combustion , control_remote , ar_selfpropelled_bomb ] , [ ar_medium_trike , 0 , control_remote , ar_gun ] ] ; 3 :
25693: LD_ADDR_LOC 55
25697: PUSH
25698: LD_INT 13
25700: PUSH
25701: LD_INT 0
25703: PUSH
25704: LD_INT 2
25706: PUSH
25707: LD_INT 28
25709: PUSH
25710: EMPTY
25711: LIST
25712: LIST
25713: LIST
25714: LIST
25715: PUSH
25716: LD_INT 13
25718: PUSH
25719: LD_INT 1
25721: PUSH
25722: LD_INT 2
25724: PUSH
25725: LD_INT 29
25727: PUSH
25728: EMPTY
25729: LIST
25730: LIST
25731: LIST
25732: LIST
25733: PUSH
25734: LD_INT 13
25736: PUSH
25737: LD_INT 0
25739: PUSH
25740: LD_INT 2
25742: PUSH
25743: LD_INT 27
25745: PUSH
25746: EMPTY
25747: LIST
25748: LIST
25749: LIST
25750: LIST
25751: PUSH
25752: EMPTY
25753: LIST
25754: LIST
25755: LIST
25756: ST_TO_ADDR
25757: GO 25816
25759: LD_INT 3
25761: DOUBLE
25762: EQUAL
25763: IFTRUE 25767
25765: GO 25815
25767: POP
// prefered := [ [ 0 , engine_siberite , control_computer , ru_heavy_gun ] , [ 0 , engine_siberite , control_computer , ru_rocket ] ] ; end ;
25768: LD_ADDR_LOC 55
25772: PUSH
25773: LD_INT 0
25775: PUSH
25776: LD_INT 3
25778: PUSH
25779: LD_INT 3
25781: PUSH
25782: LD_INT 46
25784: PUSH
25785: EMPTY
25786: LIST
25787: LIST
25788: LIST
25789: LIST
25790: PUSH
25791: LD_INT 0
25793: PUSH
25794: LD_INT 3
25796: PUSH
25797: LD_INT 3
25799: PUSH
25800: LD_INT 47
25802: PUSH
25803: EMPTY
25804: LIST
25805: LIST
25806: LIST
25807: LIST
25808: PUSH
25809: EMPTY
25810: LIST
25811: LIST
25812: ST_TO_ADDR
25813: GO 25816
25815: POP
// end ;
25816: LD_VAR 0 2
25820: RET
// function GetUsableFactory ( side ) ; var un , vysledek ; begin
25821: LD_INT 0
25823: PPUSH
25824: PPUSH
25825: PPUSH
// un := FilterAllUnits ( [ [ f_side , side ] , [ f_or , [ f_btype , b_workshop ] , [ f_btype , b_factory ] ] ] ) ;
25826: LD_ADDR_VAR 0 3
25830: PUSH
25831: LD_INT 22
25833: PUSH
25834: LD_VAR 0 1
25838: PUSH
25839: EMPTY
25840: LIST
25841: LIST
25842: PUSH
25843: LD_INT 2
25845: PUSH
25846: LD_INT 30
25848: PUSH
25849: LD_INT 2
25851: PUSH
25852: EMPTY
25853: LIST
25854: LIST
25855: PUSH
25856: LD_INT 30
25858: PUSH
25859: LD_INT 3
25861: PUSH
25862: EMPTY
25863: LIST
25864: LIST
25865: PUSH
25866: EMPTY
25867: LIST
25868: LIST
25869: LIST
25870: PUSH
25871: EMPTY
25872: LIST
25873: LIST
25874: PPUSH
25875: CALL_OW 69
25879: ST_TO_ADDR
// if un then
25880: LD_VAR 0 3
25884: IFFALSE 25902
// vysledek = un [ 1 ] else
25886: LD_ADDR_VAR 0 4
25890: PUSH
25891: LD_VAR 0 3
25895: PUSH
25896: LD_INT 1
25898: ARRAY
25899: ST_TO_ADDR
25900: GO 25910
// vysledek := false ;
25902: LD_ADDR_VAR 0 4
25906: PUSH
25907: LD_INT 0
25909: ST_TO_ADDR
// result := vysledek ;
25910: LD_ADDR_VAR 0 2
25914: PUSH
25915: LD_VAR 0 4
25919: ST_TO_ADDR
// end ;
25920: LD_VAR 0 2
25924: RET
// every 0 0$15.9 do var un , factory , active_side , active_nation ;
25925: GO 25927
25927: DISABLE
25928: LD_INT 0
25930: PPUSH
25931: PPUSH
25932: PPUSH
25933: PPUSH
// begin for active_side in cpu_list do
25934: LD_ADDR_VAR 0 3
25938: PUSH
25939: LD_EXP 8
25943: PUSH
25944: FOR_IN
25945: IFFALSE 26156
// if ( Get_Resources ( active_side ) [ 2 ] > 29 ) or ( Get_resources ( active_side ) [ 3 ] > 9 ) then
25947: LD_VAR 0 3
25951: PPUSH
25952: CALL 26162 0 1
25956: PUSH
25957: LD_INT 2
25959: ARRAY
25960: PUSH
25961: LD_INT 29
25963: GREATER
25964: PUSH
25965: LD_VAR 0 3
25969: PPUSH
25970: CALL 26162 0 1
25974: PUSH
25975: LD_INT 3
25977: ARRAY
25978: PUSH
25979: LD_INT 9
25981: GREATER
25982: OR
25983: IFFALSE 26154
// begin case active_side of us :
25985: LD_VAR 0 3
25989: PUSH
25990: LD_EXP 3
25994: DOUBLE
25995: EQUAL
25996: IFTRUE 26000
25998: GO 26011
26000: POP
// if us_sib_wait then
26001: LD_EXP 71
26005: IFFALSE 26009
// break ; ru :
26007: GO 26156
26009: GO 26033
26011: LD_EXP 2
26015: DOUBLE
26016: EQUAL
26017: IFTRUE 26021
26019: GO 26032
26021: POP
// if ru_sib_wait then
26022: LD_EXP 72
26026: IFFALSE 26030
// break ; end ;
26028: GO 26156
26030: GO 26033
26032: POP
// un := 0 ;
26033: LD_ADDR_VAR 0 1
26037: PUSH
26038: LD_INT 0
26040: ST_TO_ADDR
// factory := GetUsableFactory ( active_side ) ;
26041: LD_ADDR_VAR 0 2
26045: PUSH
26046: LD_VAR 0 3
26050: PPUSH
26051: CALL 25821 0 1
26055: ST_TO_ADDR
// for un in factory do
26056: LD_ADDR_VAR 0 1
26060: PUSH
26061: LD_VAR 0 2
26065: PUSH
26066: FOR_IN
26067: IFFALSE 26073
// break ;
26069: GO 26073
26071: GO 26066
26073: POP
26074: POP
// active_nation := GetCPUNation ( active_side ) ;
26075: LD_ADDR_VAR 0 4
26079: PUSH
26080: LD_VAR 0 3
26084: PPUSH
26085: CALL 24724 0 1
26089: ST_TO_ADDR
// init_priority ( active_side , active_nation ) ;
26090: LD_VAR 0 3
26094: PPUSH
26095: LD_VAR 0 4
26099: PPUSH
26100: CALL 24804 0 2
// init_prefered_vehicles ( active_nation ) ;
26104: LD_VAR 0 4
26108: PPUSH
26109: CALL 25601 0 1
// if un and not BuildingStatus ( un ) = bs_working then
26113: LD_VAR 0 1
26117: PUSH
26118: LD_VAR 0 1
26122: PPUSH
26123: CALL_OW 461
26127: PUSH
26128: LD_INT 3
26130: EQUAL
26131: NOT
26132: AND
26133: IFFALSE 26154
// build_new_vehicle ( active_side , active_nation , un ) ;
26135: LD_VAR 0 3
26139: PPUSH
26140: LD_VAR 0 4
26144: PPUSH
26145: LD_VAR 0 1
26149: PPUSH
26150: CALL 26238 0 3
// end ;
26154: GO 25944
26156: POP
26157: POP
// enable ;
26158: ENABLE
// end ;
26159: PPOPN 4
26161: END
// function Get_Resources ( side ) ; begin
26162: LD_INT 0
26164: PPUSH
// result := GetResources ( GetBase ( FilterAllUnits ( [ [ f_side , side ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) [ 1 ] ) ) ;
26165: LD_ADDR_VAR 0 2
26169: PUSH
26170: LD_INT 22
26172: PUSH
26173: LD_VAR 0 1
26177: PUSH
26178: EMPTY
26179: LIST
26180: LIST
26181: PUSH
26182: LD_INT 2
26184: PUSH
26185: LD_INT 30
26187: PUSH
26188: LD_INT 0
26190: PUSH
26191: EMPTY
26192: LIST
26193: LIST
26194: PUSH
26195: LD_INT 30
26197: PUSH
26198: LD_INT 1
26200: PUSH
26201: EMPTY
26202: LIST
26203: LIST
26204: PUSH
26205: EMPTY
26206: LIST
26207: LIST
26208: LIST
26209: PUSH
26210: EMPTY
26211: LIST
26212: LIST
26213: PPUSH
26214: CALL_OW 69
26218: PUSH
26219: LD_INT 1
26221: ARRAY
26222: PPUSH
26223: CALL_OW 274
26227: PPUSH
26228: CALL_OW 279
26232: ST_TO_ADDR
// end ;
26233: LD_VAR 0 2
26237: RET
// function build_new_vehicle ( side , nation , factory ) ; var can_made , mechanics , wanted ; begin
26238: LD_INT 0
26240: PPUSH
26241: PPUSH
26242: PPUSH
26243: PPUSH
// mechanics := request_people ( side , class_mechanic , 1 ) ;
26244: LD_ADDR_VAR 0 6
26248: PUSH
26249: LD_VAR 0 1
26253: PPUSH
26254: LD_INT 3
26256: PPUSH
26257: LD_INT 1
26259: PPUSH
26260: CALL 24656 0 3
26264: ST_TO_ADDR
// can_made := get_progress ( side , nation , factory ) ;
26265: LD_ADDR_VAR 0 5
26269: PUSH
26270: LD_VAR 0 1
26274: PPUSH
26275: LD_VAR 0 2
26279: PPUSH
26280: LD_VAR 0 3
26284: PPUSH
26285: CALL 26395 0 3
26289: ST_TO_ADDR
// if can_made then
26290: LD_VAR 0 5
26294: IFFALSE 26371
// begin wanted := get_next_vehicle ( side , nation , factory , can_made ) ;
26296: LD_ADDR_VAR 0 7
26300: PUSH
26301: LD_VAR 0 1
26305: PPUSH
26306: LD_VAR 0 2
26310: PPUSH
26311: LD_VAR 0 3
26315: PPUSH
26316: LD_VAR 0 5
26320: PPUSH
26321: CALL 26874 0 4
26325: ST_TO_ADDR
// if transfer_mechanics ( side , mechanics , factory , wanted ) then
26326: LD_VAR 0 1
26330: PPUSH
26331: LD_VAR 0 6
26335: PPUSH
26336: LD_VAR 0 3
26340: PPUSH
26341: LD_VAR 0 7
26345: PPUSH
26346: CALL 29343 0 4
26350: IFFALSE 26371
// start_building_vehicle ( nation , factory , wanted ) ;
26352: LD_VAR 0 2
26356: PPUSH
26357: LD_VAR 0 3
26361: PPUSH
26362: LD_VAR 0 7
26366: PPUSH
26367: CALL 29614 0 3
// end ; cleanup_extensions ( side , nation , factory ) ;
26371: LD_VAR 0 1
26375: PPUSH
26376: LD_VAR 0 2
26380: PPUSH
26381: LD_VAR 0 3
26385: PPUSH
26386: CALL 29838 0 3
// end ;
26390: LD_VAR 0 4
26394: RET
// function get_progress ( side , nation , factory ) ; var vysledek , chassis , weapon , list ; begin
26395: LD_INT 0
26397: PPUSH
26398: PPUSH
26399: PPUSH
26400: PPUSH
26401: PPUSH
// vysledek := [ ] ;
26402: LD_ADDR_VAR 0 5
26406: PUSH
26407: EMPTY
26408: ST_TO_ADDR
// list := [ ] ;
26409: LD_ADDR_VAR 0 8
26413: PUSH
26414: EMPTY
26415: ST_TO_ADDR
// case nation of 1 :
26416: LD_VAR 0 2
26420: PUSH
26421: LD_INT 1
26423: DOUBLE
26424: EQUAL
26425: IFTRUE 26429
26427: GO 26442
26429: POP
// list := us_weapons ; 2 :
26430: LD_ADDR_VAR 0 8
26434: PUSH
26435: LD_LOC 50
26439: ST_TO_ADDR
26440: GO 26485
26442: LD_INT 2
26444: DOUBLE
26445: EQUAL
26446: IFTRUE 26450
26448: GO 26463
26450: POP
// list := ar_weapons ; 3 :
26451: LD_ADDR_VAR 0 8
26455: PUSH
26456: LD_LOC 51
26460: ST_TO_ADDR
26461: GO 26485
26463: LD_INT 3
26465: DOUBLE
26466: EQUAL
26467: IFTRUE 26471
26469: GO 26484
26471: POP
// list := ru_weapons ; end ;
26472: LD_ADDR_VAR 0 8
26476: PUSH
26477: LD_LOC 52
26481: ST_TO_ADDR
26482: GO 26485
26484: POP
// for chassis = 1 to 3 do
26485: LD_ADDR_VAR 0 6
26489: PUSH
26490: DOUBLE
26491: LD_INT 1
26493: DEC
26494: ST_TO_ADDR
26495: LD_INT 3
26497: PUSH
26498: FOR_TO
26499: IFFALSE 26661
// if ( chassis < 3 ) or ( nation = nation_russian ) or ( TrackExtension ( factory ) ) then
26501: LD_VAR 0 6
26505: PUSH
26506: LD_INT 3
26508: LESS
26509: PUSH
26510: LD_VAR 0 2
26514: PUSH
26515: LD_INT 3
26517: EQUAL
26518: OR
26519: PUSH
26520: LD_VAR 0 3
26524: PPUSH
26525: CALL 27569 0 1
26529: OR
26530: IFFALSE 26659
// for weapon in list [ chassis ] do
26532: LD_ADDR_VAR 0 7
26536: PUSH
26537: LD_VAR 0 8
26541: PUSH
26542: LD_VAR 0 6
26546: ARRAY
26547: PUSH
26548: FOR_IN
26549: IFFALSE 26657
// if Technology_Researched ( side , weapon [ 2 ] ) or not weapon [ 2 ] then
26551: LD_VAR 0 1
26555: PPUSH
26556: LD_VAR 0 7
26560: PUSH
26561: LD_INT 2
26563: ARRAY
26564: PPUSH
26565: CALL 26678 0 2
26569: PUSH
26570: LD_VAR 0 7
26574: PUSH
26575: LD_INT 2
26577: ARRAY
26578: NOT
26579: OR
26580: IFFALSE 26655
// begin if ExtensionBuild ( factory , weapon [ 3 ] ) or not weapon [ 3 ] then
26582: LD_VAR 0 3
26586: PPUSH
26587: LD_VAR 0 7
26591: PUSH
26592: LD_INT 3
26594: ARRAY
26595: PPUSH
26596: CALL 26748 0 2
26600: PUSH
26601: LD_VAR 0 7
26605: PUSH
26606: LD_INT 3
26608: ARRAY
26609: NOT
26610: OR
26611: IFFALSE 26635
// vysledek := vysledek ^ weapon [ 1 ] else
26613: LD_ADDR_VAR 0 5
26617: PUSH
26618: LD_VAR 0 5
26622: PUSH
26623: LD_VAR 0 7
26627: PUSH
26628: LD_INT 1
26630: ARRAY
26631: ADD
26632: ST_TO_ADDR
26633: GO 26655
// extension_wanted := extension_wanted ^ weapon [ 3 ] ;
26635: LD_ADDR_EXP 70
26639: PUSH
26640: LD_EXP 70
26644: PUSH
26645: LD_VAR 0 7
26649: PUSH
26650: LD_INT 3
26652: ARRAY
26653: ADD
26654: ST_TO_ADDR
// end ;
26655: GO 26548
26657: POP
26658: POP
26659: GO 26498
26661: POP
26662: POP
// result := vysledek ;
26663: LD_ADDR_VAR 0 4
26667: PUSH
26668: LD_VAR 0 5
26672: ST_TO_ADDR
// end ;
26673: LD_VAR 0 4
26677: RET
// function Technology_Researched ( side , list ) ; var tech , vysledek ; begin
26678: LD_INT 0
26680: PPUSH
26681: PPUSH
26682: PPUSH
// vysledek := true ;
26683: LD_ADDR_VAR 0 5
26687: PUSH
26688: LD_INT 1
26690: ST_TO_ADDR
// for tech in list do
26691: LD_ADDR_VAR 0 4
26695: PUSH
26696: LD_VAR 0 2
26700: PUSH
26701: FOR_IN
26702: IFFALSE 26731
// if not Researched ( side , tech ) then
26704: LD_VAR 0 1
26708: PPUSH
26709: LD_VAR 0 4
26713: PPUSH
26714: CALL_OW 325
26718: NOT
26719: IFFALSE 26729
// vysledek := false ;
26721: LD_ADDR_VAR 0 5
26725: PUSH
26726: LD_INT 0
26728: ST_TO_ADDR
26729: GO 26701
26731: POP
26732: POP
// result := vysledek ;
26733: LD_ADDR_VAR 0 3
26737: PUSH
26738: LD_VAR 0 5
26742: ST_TO_ADDR
// end ;
26743: LD_VAR 0 3
26747: RET
// function ExtensionBuild ( factory , extension ) ; var i , vysledek , list ; begin
26748: LD_INT 0
26750: PPUSH
26751: PPUSH
26752: PPUSH
26753: PPUSH
// vysledek := false ;
26754: LD_ADDR_VAR 0 5
26758: PUSH
26759: LD_INT 0
26761: ST_TO_ADDR
// if extension > 0 then
26762: LD_VAR 0 2
26766: PUSH
26767: LD_INT 0
26769: GREATER
26770: IFFALSE 26851
// begin list := GetExtPositions ( factory ) ;
26772: LD_ADDR_VAR 0 6
26776: PUSH
26777: LD_VAR 0 1
26781: PPUSH
26782: CALL_OW 270
26786: ST_TO_ADDR
// for i in list do
26787: LD_ADDR_VAR 0 4
26791: PUSH
26792: LD_VAR 0 6
26796: PUSH
26797: FOR_IN
26798: IFFALSE 26847
// if GetBType ( HexInfo ( i [ 1 ] , i [ 2 ] ) ) = extension then
26800: LD_VAR 0 4
26804: PUSH
26805: LD_INT 1
26807: ARRAY
26808: PPUSH
26809: LD_VAR 0 4
26813: PUSH
26814: LD_INT 2
26816: ARRAY
26817: PPUSH
26818: CALL_OW 428
26822: PPUSH
26823: CALL_OW 266
26827: PUSH
26828: LD_VAR 0 2
26832: EQUAL
26833: IFFALSE 26845
// begin vysledek := true ;
26835: LD_ADDR_VAR 0 5
26839: PUSH
26840: LD_INT 1
26842: ST_TO_ADDR
// break ;
26843: GO 26847
// end ;
26845: GO 26797
26847: POP
26848: POP
// end else
26849: GO 26859
// vysledek := true ;
26851: LD_ADDR_VAR 0 5
26855: PUSH
26856: LD_INT 1
26858: ST_TO_ADDR
// result := vysledek ;
26859: LD_ADDR_VAR 0 3
26863: PUSH
26864: LD_VAR 0 5
26868: ST_TO_ADDR
// end ;
26869: LD_VAR 0 3
26873: RET
// function get_next_vehicle ( side , nation , factory , possible ) ; var un , pom , list , cargo_bay , crane , nation_cargo , nation_crane , weapon_prefered , weapon_else , vysledek ; begin
26874: LD_INT 0
26876: PPUSH
26877: PPUSH
26878: PPUSH
26879: PPUSH
26880: PPUSH
26881: PPUSH
26882: PPUSH
26883: PPUSH
26884: PPUSH
26885: PPUSH
26886: PPUSH
// vysledek := [ ] ;
26887: LD_ADDR_VAR 0 15
26891: PUSH
26892: EMPTY
26893: ST_TO_ADDR
// case nation of 1 :
26894: LD_VAR 0 2
26898: PUSH
26899: LD_INT 1
26901: DOUBLE
26902: EQUAL
26903: IFTRUE 26907
26905: GO 26936
26907: POP
// begin list := us_weapons ;
26908: LD_ADDR_VAR 0 8
26912: PUSH
26913: LD_LOC 50
26917: ST_TO_ADDR
// nation_cargo := us_cargo_bay ;
26918: LD_ADDR_VAR 0 11
26922: PUSH
26923: LD_INT 12
26925: ST_TO_ADDR
// nation_crane := us_crane ;
26926: LD_ADDR_VAR 0 12
26930: PUSH
26931: LD_INT 13
26933: ST_TO_ADDR
// end ; 2 :
26934: GO 27011
26936: LD_INT 2
26938: DOUBLE
26939: EQUAL
26940: IFTRUE 26944
26942: GO 26973
26944: POP
// begin list := ar_weapons ;
26945: LD_ADDR_VAR 0 8
26949: PUSH
26950: LD_LOC 51
26954: ST_TO_ADDR
// nation_cargo := ar_cargo_bay ;
26955: LD_ADDR_VAR 0 11
26959: PUSH
26960: LD_INT 32
26962: ST_TO_ADDR
// nation_crane := 0 ;
26963: LD_ADDR_VAR 0 12
26967: PUSH
26968: LD_INT 0
26970: ST_TO_ADDR
// end ; 3 :
26971: GO 27011
26973: LD_INT 3
26975: DOUBLE
26976: EQUAL
26977: IFTRUE 26981
26979: GO 27010
26981: POP
// begin list := ru_weapons ;
26982: LD_ADDR_VAR 0 8
26986: PUSH
26987: LD_LOC 52
26991: ST_TO_ADDR
// nation_cargo := ru_cargo_bay ;
26992: LD_ADDR_VAR 0 11
26996: PUSH
26997: LD_INT 51
26999: ST_TO_ADDR
// nation_crane := ru_crane ;
27000: LD_ADDR_VAR 0 12
27004: PUSH
27005: LD_INT 52
27007: ST_TO_ADDR
// end ; end ;
27008: GO 27011
27010: POP
// pom := AvailableWeaponList ( factory ) ;
27011: LD_ADDR_VAR 0 7
27015: PUSH
27016: LD_VAR 0 3
27020: PPUSH
27021: CALL_OW 478
27025: ST_TO_ADDR
// cargo_bay := FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_vehicle ] , [ f_weapon , nation_cargo ] ] ) ;
27026: LD_ADDR_VAR 0 9
27030: PUSH
27031: LD_INT 22
27033: PUSH
27034: LD_VAR 0 1
27038: PUSH
27039: EMPTY
27040: LIST
27041: LIST
27042: PUSH
27043: LD_INT 21
27045: PUSH
27046: LD_INT 2
27048: PUSH
27049: EMPTY
27050: LIST
27051: LIST
27052: PUSH
27053: LD_INT 34
27055: PUSH
27056: LD_VAR 0 11
27060: PUSH
27061: EMPTY
27062: LIST
27063: LIST
27064: PUSH
27065: EMPTY
27066: LIST
27067: LIST
27068: LIST
27069: PPUSH
27070: CALL_OW 69
27074: ST_TO_ADDR
// if ( not cargo_bay ) and ( nation_cargo in pom ) and Remote_or_Computer ( factory ) and TrackExtension ( factory ) then
27075: LD_VAR 0 9
27079: NOT
27080: PUSH
27081: LD_VAR 0 11
27085: PUSH
27086: LD_VAR 0 7
27090: IN
27091: AND
27092: PUSH
27093: LD_VAR 0 3
27097: PPUSH
27098: CALL 27506 0 1
27102: AND
27103: PUSH
27104: LD_VAR 0 3
27108: PPUSH
27109: CALL 27569 0 1
27113: AND
27114: IFFALSE 27148
// vysledek := Define_NonCombat ( side , nation , factory , nation_cargo ) else
27116: LD_ADDR_VAR 0 15
27120: PUSH
27121: LD_VAR 0 1
27125: PPUSH
27126: LD_VAR 0 2
27130: PPUSH
27131: LD_VAR 0 3
27135: PPUSH
27136: LD_VAR 0 11
27140: PPUSH
27141: CALL 27595 0 4
27145: ST_TO_ADDR
27146: GO 27164
// possible := possible diff nation_cargo ;
27148: LD_ADDR_VAR 0 4
27152: PUSH
27153: LD_VAR 0 4
27157: PUSH
27158: LD_VAR 0 11
27162: DIFF
27163: ST_TO_ADDR
// if not vysledek then
27164: LD_VAR 0 15
27168: NOT
27169: IFFALSE 27309
// begin crane := FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_vehicle ] , [ f_weapon , nation_crane ] ] ) ;
27171: LD_ADDR_VAR 0 10
27175: PUSH
27176: LD_INT 22
27178: PUSH
27179: LD_VAR 0 1
27183: PUSH
27184: EMPTY
27185: LIST
27186: LIST
27187: PUSH
27188: LD_INT 21
27190: PUSH
27191: LD_INT 2
27193: PUSH
27194: EMPTY
27195: LIST
27196: LIST
27197: PUSH
27198: LD_INT 34
27200: PUSH
27201: LD_VAR 0 12
27205: PUSH
27206: EMPTY
27207: LIST
27208: LIST
27209: PUSH
27210: EMPTY
27211: LIST
27212: LIST
27213: LIST
27214: PPUSH
27215: CALL_OW 69
27219: ST_TO_ADDR
// if ( not crane ) and ( nation_crane in pom ) and Remote_or_Computer ( factory ) and TrackExtension ( factory ) then
27220: LD_VAR 0 10
27224: NOT
27225: PUSH
27226: LD_VAR 0 12
27230: PUSH
27231: LD_VAR 0 7
27235: IN
27236: AND
27237: PUSH
27238: LD_VAR 0 3
27242: PPUSH
27243: CALL 27506 0 1
27247: AND
27248: PUSH
27249: LD_VAR 0 3
27253: PPUSH
27254: CALL 27569 0 1
27258: AND
27259: IFFALSE 27293
// vysledek := Define_NonCombat ( side , nation , factory , nation_crane ) else
27261: LD_ADDR_VAR 0 15
27265: PUSH
27266: LD_VAR 0 1
27270: PPUSH
27271: LD_VAR 0 2
27275: PPUSH
27276: LD_VAR 0 3
27280: PPUSH
27281: LD_VAR 0 12
27285: PPUSH
27286: CALL 27595 0 4
27290: ST_TO_ADDR
27291: GO 27309
// possible := possible diff nation_crane ;
27293: LD_ADDR_VAR 0 4
27297: PUSH
27298: LD_VAR 0 4
27302: PUSH
27303: LD_VAR 0 12
27307: DIFF
27308: ST_TO_ADDR
// end ; if not vysledek then
27309: LD_VAR 0 15
27313: NOT
27314: IFFALSE 27491
// begin weapon_prefered := [ ] ;
27316: LD_ADDR_VAR 0 13
27320: PUSH
27321: EMPTY
27322: ST_TO_ADDR
// weapon_else := 0 ;
27323: LD_ADDR_VAR 0 14
27327: PUSH
27328: LD_INT 0
27330: ST_TO_ADDR
// for un in prefered do
27331: LD_ADDR_VAR 0 6
27335: PUSH
27336: LD_LOC 55
27340: PUSH
27341: FOR_IN
27342: IFFALSE 27381
// if ( un [ 4 ] in possible ) then
27344: LD_VAR 0 6
27348: PUSH
27349: LD_INT 4
27351: ARRAY
27352: PUSH
27353: LD_VAR 0 4
27357: IN
27358: IFFALSE 27379
// weapon_prefered := weapon_prefered ^ [ un ] ;
27360: LD_ADDR_VAR 0 13
27364: PUSH
27365: LD_VAR 0 13
27369: PUSH
27370: LD_VAR 0 6
27374: PUSH
27375: EMPTY
27376: LIST
27377: ADD
27378: ST_TO_ADDR
27379: GO 27341
27381: POP
27382: POP
// if not weapon_prefered then
27383: LD_VAR 0 13
27387: NOT
27388: IFFALSE 27461
// begin for un in possible do
27390: LD_ADDR_VAR 0 6
27394: PUSH
27395: LD_VAR 0 4
27399: PUSH
27400: FOR_IN
27401: IFFALSE 27427
// if un > weapon_else then
27403: LD_VAR 0 6
27407: PUSH
27408: LD_VAR 0 14
27412: GREATER
27413: IFFALSE 27425
// weapon_else := un ;
27415: LD_ADDR_VAR 0 14
27419: PUSH
27420: LD_VAR 0 6
27424: ST_TO_ADDR
27425: GO 27400
27427: POP
27428: POP
// vysledek := Define_Vehicle ( side , nation , factory , weapon_else ) ;
27429: LD_ADDR_VAR 0 15
27433: PUSH
27434: LD_VAR 0 1
27438: PPUSH
27439: LD_VAR 0 2
27443: PPUSH
27444: LD_VAR 0 3
27448: PPUSH
27449: LD_VAR 0 14
27453: PPUSH
27454: CALL 28395 0 4
27458: ST_TO_ADDR
// end else
27459: GO 27491
// vysledek := Select_from_Prefered ( side , nation , factory , weapon_prefered ) ;
27461: LD_ADDR_VAR 0 15
27465: PUSH
27466: LD_VAR 0 1
27470: PPUSH
27471: LD_VAR 0 2
27475: PPUSH
27476: LD_VAR 0 3
27480: PPUSH
27481: LD_VAR 0 13
27485: PPUSH
27486: CALL 27867 0 4
27490: ST_TO_ADDR
// end ; result := vysledek ;
27491: LD_ADDR_VAR 0 5
27495: PUSH
27496: LD_VAR 0 15
27500: ST_TO_ADDR
// end ;
27501: LD_VAR 0 5
27505: RET
// function Remote_or_Computer ( factory ) ; var vysledek ; begin
27506: LD_INT 0
27508: PPUSH
27509: PPUSH
// vysledek := false ;
27510: LD_ADDR_VAR 0 3
27514: PUSH
27515: LD_INT 0
27517: ST_TO_ADDR
// if ExtensionBuild ( factory , b_ext_computer ) or ExtensionBuild ( factory , b_ext_radar ) then
27518: LD_VAR 0 1
27522: PPUSH
27523: LD_INT 24
27525: PPUSH
27526: CALL 26748 0 2
27530: PUSH
27531: LD_VAR 0 1
27535: PPUSH
27536: LD_INT 20
27538: PPUSH
27539: CALL 26748 0 2
27543: OR
27544: IFFALSE 27554
// vysledek := true ;
27546: LD_ADDR_VAR 0 3
27550: PUSH
27551: LD_INT 1
27553: ST_TO_ADDR
// result := vysledek ;
27554: LD_ADDR_VAR 0 2
27558: PUSH
27559: LD_VAR 0 3
27563: ST_TO_ADDR
// end ;
27564: LD_VAR 0 2
27568: RET
// function TrackExtension ( factory ) ; begin
27569: LD_INT 0
27571: PPUSH
// result := ExtensionBuild ( factory , b_ext_track ) ;
27572: LD_ADDR_VAR 0 2
27576: PUSH
27577: LD_VAR 0 1
27581: PPUSH
27582: LD_INT 16
27584: PPUSH
27585: CALL 26748 0 2
27589: ST_TO_ADDR
// end ;
27590: LD_VAR 0 2
27594: RET
// function Define_NonCombat ( side , nation , factory , weapon ) ; var components ; begin
27595: LD_INT 0
27597: PPUSH
27598: PPUSH
// components := [ ] ;
27599: LD_ADDR_VAR 0 6
27603: PUSH
27604: EMPTY
27605: ST_TO_ADDR
// case nation of 1 :
27606: LD_VAR 0 2
27610: PUSH
27611: LD_INT 1
27613: DOUBLE
27614: EQUAL
27615: IFTRUE 27619
27617: GO 27636
27619: POP
// components := components ^ us_medium_tracked ; 2 :
27620: LD_ADDR_VAR 0 6
27624: PUSH
27625: LD_VAR 0 6
27629: PUSH
27630: LD_INT 3
27632: ADD
27633: ST_TO_ADDR
27634: GO 27687
27636: LD_INT 2
27638: DOUBLE
27639: EQUAL
27640: IFTRUE 27644
27642: GO 27661
27644: POP
// components := components ^ ar_half_tracked ; 3 :
27645: LD_ADDR_VAR 0 6
27649: PUSH
27650: LD_VAR 0 6
27654: PUSH
27655: LD_INT 14
27657: ADD
27658: ST_TO_ADDR
27659: GO 27687
27661: LD_INT 3
27663: DOUBLE
27664: EQUAL
27665: IFTRUE 27669
27667: GO 27686
27669: POP
// components := components ^ ru_medium_tracked ; end ;
27670: LD_ADDR_VAR 0 6
27674: PUSH
27675: LD_VAR 0 6
27679: PUSH
27680: LD_INT 22
27682: ADD
27683: ST_TO_ADDR
27684: GO 27687
27686: POP
// if ExtensionBuild ( factory , b_ext_siberium ) and ( Get_Resources ( side ) [ 3 ] >= sib_engine ) then
27687: LD_VAR 0 3
27691: PPUSH
27692: LD_INT 21
27694: PPUSH
27695: CALL 26748 0 2
27699: PUSH
27700: LD_VAR 0 1
27704: PPUSH
27705: CALL 26162 0 1
27709: PUSH
27710: LD_INT 3
27712: ARRAY
27713: PUSH
27714: LD_LOC 53
27718: GREATEREQUAL
27719: AND
27720: IFFALSE 27738
// components := components ^ engine_siberite else
27722: LD_ADDR_VAR 0 6
27726: PUSH
27727: LD_VAR 0 6
27731: PUSH
27732: LD_INT 3
27734: ADD
27735: ST_TO_ADDR
27736: GO 27752
// components := components ^ engine_combustion ;
27738: LD_ADDR_VAR 0 6
27742: PUSH
27743: LD_VAR 0 6
27747: PUSH
27748: LD_INT 1
27750: ADD
27751: ST_TO_ADDR
// if ( nation = nation_arabian ) and ApemanCanDrive ( side ) then
27752: LD_VAR 0 2
27756: PUSH
27757: LD_INT 2
27759: EQUAL
27760: PUSH
27761: LD_VAR 0 1
27765: PPUSH
27766: CALL 29280 0 1
27770: AND
27771: IFFALSE 27789
// components := components ^ control_apeman else
27773: LD_ADDR_VAR 0 6
27777: PUSH
27778: LD_VAR 0 6
27782: PUSH
27783: LD_INT 5
27785: ADD
27786: ST_TO_ADDR
27787: GO 27833
// if ExtensionBuild ( factory , b_ext_computer ) then
27789: LD_VAR 0 3
27793: PPUSH
27794: LD_INT 24
27796: PPUSH
27797: CALL 26748 0 2
27801: IFFALSE 27819
// components := components ^ control_computer else
27803: LD_ADDR_VAR 0 6
27807: PUSH
27808: LD_VAR 0 6
27812: PUSH
27813: LD_INT 3
27815: ADD
27816: ST_TO_ADDR
27817: GO 27833
// components := components ^ control_remote ;
27819: LD_ADDR_VAR 0 6
27823: PUSH
27824: LD_VAR 0 6
27828: PUSH
27829: LD_INT 2
27831: ADD
27832: ST_TO_ADDR
// components := components ^ [ weapon ] ;
27833: LD_ADDR_VAR 0 6
27837: PUSH
27838: LD_VAR 0 6
27842: PUSH
27843: LD_VAR 0 4
27847: PUSH
27848: EMPTY
27849: LIST
27850: ADD
27851: ST_TO_ADDR
// result := components ;
27852: LD_ADDR_VAR 0 5
27856: PUSH
27857: LD_VAR 0 6
27861: ST_TO_ADDR
// end ;
27862: LD_VAR 0 5
27866: RET
// function Select_from_Prefered ( side , nation , factory , possible ) ; var un , i , count , components , controls , vysledek ; begin
27867: LD_INT 0
27869: PPUSH
27870: PPUSH
27871: PPUSH
27872: PPUSH
27873: PPUSH
27874: PPUSH
27875: PPUSH
// count := [ - 1 , 0 ] ;
27876: LD_ADDR_VAR 0 8
27880: PUSH
27881: LD_INT 1
27883: NEG
27884: PUSH
27885: LD_INT 0
27887: PUSH
27888: EMPTY
27889: LIST
27890: LIST
27891: ST_TO_ADDR
// for un in possible do
27892: LD_ADDR_VAR 0 6
27896: PUSH
27897: LD_VAR 0 4
27901: PUSH
27902: FOR_IN
27903: IFFALSE 28002
// begin i := 0 + FilterAllUnits ( [ [ f_side , side ] , [ f_weapon , un [ 4 ] ] ] ) ;
27905: LD_ADDR_VAR 0 7
27909: PUSH
27910: LD_INT 0
27912: PUSH
27913: LD_INT 22
27915: PUSH
27916: LD_VAR 0 1
27920: PUSH
27921: EMPTY
27922: LIST
27923: LIST
27924: PUSH
27925: LD_INT 34
27927: PUSH
27928: LD_VAR 0 6
27932: PUSH
27933: LD_INT 4
27935: ARRAY
27936: PUSH
27937: EMPTY
27938: LIST
27939: LIST
27940: PUSH
27941: EMPTY
27942: LIST
27943: LIST
27944: PPUSH
27945: CALL_OW 69
27949: PLUS
27950: ST_TO_ADDR
// if ( count [ 1 ] < 0 ) or ( count [ 1 ] > i ) then
27951: LD_VAR 0 8
27955: PUSH
27956: LD_INT 1
27958: ARRAY
27959: PUSH
27960: LD_INT 0
27962: LESS
27963: PUSH
27964: LD_VAR 0 8
27968: PUSH
27969: LD_INT 1
27971: ARRAY
27972: PUSH
27973: LD_VAR 0 7
27977: GREATER
27978: OR
27979: IFFALSE 28000
// count := [ i , un ] ;
27981: LD_ADDR_VAR 0 8
27985: PUSH
27986: LD_VAR 0 7
27990: PUSH
27991: LD_VAR 0 6
27995: PUSH
27996: EMPTY
27997: LIST
27998: LIST
27999: ST_TO_ADDR
// end ;
28000: GO 27902
28002: POP
28003: POP
// un := count [ 2 ] ;
28004: LD_ADDR_VAR 0 6
28008: PUSH
28009: LD_VAR 0 8
28013: PUSH
28014: LD_INT 2
28016: ARRAY
28017: ST_TO_ADDR
// components := [ ] ;
28018: LD_ADDR_VAR 0 9
28022: PUSH
28023: EMPTY
28024: ST_TO_ADDR
// controls := AvailableControlList ( factory ) ;
28025: LD_ADDR_VAR 0 10
28029: PUSH
28030: LD_VAR 0 3
28034: PPUSH
28035: CALL_OW 477
28039: ST_TO_ADDR
// if un [ 1 ] in AvailableChassisList ( factory ) then
28040: LD_VAR 0 6
28044: PUSH
28045: LD_INT 1
28047: ARRAY
28048: PUSH
28049: LD_VAR 0 3
28053: PPUSH
28054: CALL_OW 475
28058: IN
28059: IFFALSE 28083
// components := components ^ un [ 1 ] else
28061: LD_ADDR_VAR 0 9
28065: PUSH
28066: LD_VAR 0 9
28070: PUSH
28071: LD_VAR 0 6
28075: PUSH
28076: LD_INT 1
28078: ARRAY
28079: ADD
28080: ST_TO_ADDR
28081: GO 28133
// components := components ^ SelectChassis ( side , nation , factory , ChassisWeight ( nation , un [ 4 ] ) ) ;
28083: LD_ADDR_VAR 0 9
28087: PUSH
28088: LD_VAR 0 9
28092: PUSH
28093: LD_VAR 0 1
28097: PPUSH
28098: LD_VAR 0 2
28102: PPUSH
28103: LD_VAR 0 3
28107: PPUSH
28108: LD_VAR 0 2
28112: PPUSH
28113: LD_VAR 0 6
28117: PUSH
28118: LD_INT 4
28120: ARRAY
28121: PPUSH
28122: CALL 29103 0 2
28126: PPUSH
28127: CALL 28737 0 4
28131: ADD
28132: ST_TO_ADDR
// if un [ 2 ] in AvailableEngineList ( factory ) then
28133: LD_VAR 0 6
28137: PUSH
28138: LD_INT 2
28140: ARRAY
28141: PUSH
28142: LD_VAR 0 3
28146: PPUSH
28147: CALL_OW 476
28151: IN
28152: IFFALSE 28176
// components := components ^ un [ 2 ] else
28154: LD_ADDR_VAR 0 9
28158: PUSH
28159: LD_VAR 0 9
28163: PUSH
28164: LD_VAR 0 6
28168: PUSH
28169: LD_INT 2
28171: ARRAY
28172: ADD
28173: ST_TO_ADDR
28174: GO 28251
// if ( not components [ 1 ] in [ us_light_wheeled , ar_hovercraft , ar_light_trike ] ) and ( Get_Resources ( side ) [ 3 ] > 9 ) then
28176: LD_VAR 0 9
28180: PUSH
28181: LD_INT 1
28183: ARRAY
28184: PUSH
28185: LD_INT 1
28187: PUSH
28188: LD_INT 11
28190: PUSH
28191: LD_INT 12
28193: PUSH
28194: EMPTY
28195: LIST
28196: LIST
28197: LIST
28198: IN
28199: NOT
28200: PUSH
28201: LD_VAR 0 1
28205: PPUSH
28206: CALL 26162 0 1
28210: PUSH
28211: LD_INT 3
28213: ARRAY
28214: PUSH
28215: LD_INT 9
28217: GREATER
28218: AND
28219: IFFALSE 28237
// components := components ^ engine_siberite else
28221: LD_ADDR_VAR 0 9
28225: PUSH
28226: LD_VAR 0 9
28230: PUSH
28231: LD_INT 3
28233: ADD
28234: ST_TO_ADDR
28235: GO 28251
// components := components ^ engine_combustion ;
28237: LD_ADDR_VAR 0 9
28241: PUSH
28242: LD_VAR 0 9
28246: PUSH
28247: LD_INT 1
28249: ADD
28250: ST_TO_ADDR
// if un [ 3 ] in AvailableControlList ( factory ) then
28251: LD_VAR 0 6
28255: PUSH
28256: LD_INT 3
28258: ARRAY
28259: PUSH
28260: LD_VAR 0 3
28264: PPUSH
28265: CALL_OW 477
28269: IN
28270: IFFALSE 28294
// components := components ^ un [ 3 ] else
28272: LD_ADDR_VAR 0 9
28276: PUSH
28277: LD_VAR 0 9
28281: PUSH
28282: LD_VAR 0 6
28286: PUSH
28287: LD_INT 3
28289: ARRAY
28290: ADD
28291: ST_TO_ADDR
28292: GO 28360
// begin if control_remote in controls then
28294: LD_INT 2
28296: PUSH
28297: LD_VAR 0 10
28301: IN
28302: IFFALSE 28320
// components := components ^ control_remote else
28304: LD_ADDR_VAR 0 9
28308: PUSH
28309: LD_VAR 0 9
28313: PUSH
28314: LD_INT 2
28316: ADD
28317: ST_TO_ADDR
28318: GO 28360
// if control_computer in controls then
28320: LD_INT 3
28322: PUSH
28323: LD_VAR 0 10
28327: IN
28328: IFFALSE 28346
// components := components ^ control_computer else
28330: LD_ADDR_VAR 0 9
28334: PUSH
28335: LD_VAR 0 9
28339: PUSH
28340: LD_INT 3
28342: ADD
28343: ST_TO_ADDR
28344: GO 28360
// components := components ^ control_manual ;
28346: LD_ADDR_VAR 0 9
28350: PUSH
28351: LD_VAR 0 9
28355: PUSH
28356: LD_INT 1
28358: ADD
28359: ST_TO_ADDR
// end ; components := components ^ un [ 4 ] ;
28360: LD_ADDR_VAR 0 9
28364: PUSH
28365: LD_VAR 0 9
28369: PUSH
28370: LD_VAR 0 6
28374: PUSH
28375: LD_INT 4
28377: ARRAY
28378: ADD
28379: ST_TO_ADDR
// result := components ;
28380: LD_ADDR_VAR 0 5
28384: PUSH
28385: LD_VAR 0 9
28389: ST_TO_ADDR
// end ;
28390: LD_VAR 0 5
28394: RET
// function Define_Vehicle ( side , nation , factory , weapon ) ; var components ; begin
28395: LD_INT 0
28397: PPUSH
28398: PPUSH
// components := [ ] ;
28399: LD_ADDR_VAR 0 6
28403: PUSH
28404: EMPTY
28405: ST_TO_ADDR
// case ChassisWeight ( nation , weapon ) of 1 :
28406: LD_VAR 0 2
28410: PPUSH
28411: LD_VAR 0 4
28415: PPUSH
28416: CALL 29103 0 2
28420: PUSH
28421: LD_INT 1
28423: DOUBLE
28424: EQUAL
28425: IFTRUE 28429
28427: GO 28466
28429: POP
// components := components ^ SelectChassis ( side , nation , factory , 1 ) ; 2 :
28430: LD_ADDR_VAR 0 6
28434: PUSH
28435: LD_VAR 0 6
28439: PUSH
28440: LD_VAR 0 1
28444: PPUSH
28445: LD_VAR 0 2
28449: PPUSH
28450: LD_VAR 0 3
28454: PPUSH
28455: LD_INT 1
28457: PPUSH
28458: CALL 28737 0 4
28462: ADD
28463: ST_TO_ADDR
28464: GO 28557
28466: LD_INT 2
28468: DOUBLE
28469: EQUAL
28470: IFTRUE 28474
28472: GO 28511
28474: POP
// components := components ^ SelectChassis ( side , nation , factory , 2 ) ; 3 :
28475: LD_ADDR_VAR 0 6
28479: PUSH
28480: LD_VAR 0 6
28484: PUSH
28485: LD_VAR 0 1
28489: PPUSH
28490: LD_VAR 0 2
28494: PPUSH
28495: LD_VAR 0 3
28499: PPUSH
28500: LD_INT 2
28502: PPUSH
28503: CALL 28737 0 4
28507: ADD
28508: ST_TO_ADDR
28509: GO 28557
28511: LD_INT 3
28513: DOUBLE
28514: EQUAL
28515: IFTRUE 28519
28517: GO 28556
28519: POP
// components := components ^ SelectChassis ( side , nation , factory , 3 ) ; end ;
28520: LD_ADDR_VAR 0 6
28524: PUSH
28525: LD_VAR 0 6
28529: PUSH
28530: LD_VAR 0 1
28534: PPUSH
28535: LD_VAR 0 2
28539: PPUSH
28540: LD_VAR 0 3
28544: PPUSH
28545: LD_INT 3
28547: PPUSH
28548: CALL 28737 0 4
28552: ADD
28553: ST_TO_ADDR
28554: GO 28557
28556: POP
// if ExtensionBuild ( factory , b_ext_siberium ) and ( Get_Resources ( side ) [ 3 ] >= sib_engine ) then
28557: LD_VAR 0 3
28561: PPUSH
28562: LD_INT 21
28564: PPUSH
28565: CALL 26748 0 2
28569: PUSH
28570: LD_VAR 0 1
28574: PPUSH
28575: CALL 26162 0 1
28579: PUSH
28580: LD_INT 3
28582: ARRAY
28583: PUSH
28584: LD_LOC 53
28588: GREATEREQUAL
28589: AND
28590: IFFALSE 28608
// components := components ^ engine_siberite else
28592: LD_ADDR_VAR 0 6
28596: PUSH
28597: LD_VAR 0 6
28601: PUSH
28602: LD_INT 3
28604: ADD
28605: ST_TO_ADDR
28606: GO 28622
// components := components ^ engine_combustion ;
28608: LD_ADDR_VAR 0 6
28612: PUSH
28613: LD_VAR 0 6
28617: PUSH
28618: LD_INT 1
28620: ADD
28621: ST_TO_ADDR
// if ( nation = nation_arabian ) and ApemanCanDrive ( side ) then
28622: LD_VAR 0 2
28626: PUSH
28627: LD_INT 2
28629: EQUAL
28630: PUSH
28631: LD_VAR 0 1
28635: PPUSH
28636: CALL 29280 0 1
28640: AND
28641: IFFALSE 28659
// components := components ^ control_apeman else
28643: LD_ADDR_VAR 0 6
28647: PUSH
28648: LD_VAR 0 6
28652: PUSH
28653: LD_INT 5
28655: ADD
28656: ST_TO_ADDR
28657: GO 28703
// if ExtensionBuild ( factory , b_ext_computer ) then
28659: LD_VAR 0 3
28663: PPUSH
28664: LD_INT 24
28666: PPUSH
28667: CALL 26748 0 2
28671: IFFALSE 28689
// components := components ^ control_computer else
28673: LD_ADDR_VAR 0 6
28677: PUSH
28678: LD_VAR 0 6
28682: PUSH
28683: LD_INT 3
28685: ADD
28686: ST_TO_ADDR
28687: GO 28703
// components := components ^ control_remote ;
28689: LD_ADDR_VAR 0 6
28693: PUSH
28694: LD_VAR 0 6
28698: PUSH
28699: LD_INT 2
28701: ADD
28702: ST_TO_ADDR
// components := components ^ [ weapon ] ;
28703: LD_ADDR_VAR 0 6
28707: PUSH
28708: LD_VAR 0 6
28712: PUSH
28713: LD_VAR 0 4
28717: PUSH
28718: EMPTY
28719: LIST
28720: ADD
28721: ST_TO_ADDR
// result := components ;
28722: LD_ADDR_VAR 0 5
28726: PUSH
28727: LD_VAR 0 6
28731: ST_TO_ADDR
// end ;
28732: LD_VAR 0 5
28736: RET
// function SelectChassis ( side , nation , factory , weight ) ; var un , vysledek ; begin
28737: LD_INT 0
28739: PPUSH
28740: PPUSH
28741: PPUSH
// vysledek := 0 ;
28742: LD_ADDR_VAR 0 7
28746: PUSH
28747: LD_INT 0
28749: ST_TO_ADDR
// case weight of 1 :
28750: LD_VAR 0 4
28754: PUSH
28755: LD_INT 1
28757: DOUBLE
28758: EQUAL
28759: IFTRUE 28763
28761: GO 28826
28763: POP
// begin case nation of 1 :
28764: LD_VAR 0 2
28768: PUSH
28769: LD_INT 1
28771: DOUBLE
28772: EQUAL
28773: IFTRUE 28777
28775: GO 28788
28777: POP
// vysledek := us_light_wheeled ; 2 :
28778: LD_ADDR_VAR 0 7
28782: PUSH
28783: LD_INT 1
28785: ST_TO_ADDR
28786: GO 28824
28788: LD_INT 2
28790: DOUBLE
28791: EQUAL
28792: IFTRUE 28796
28794: GO 28823
28796: POP
// if hovers_recomended then
28797: LD_LOC 57
28801: IFFALSE 28813
// vysledek := ar_hovercraft else
28803: LD_ADDR_VAR 0 7
28807: PUSH
28808: LD_INT 11
28810: ST_TO_ADDR
28811: GO 28821
// vysledek := ar_light_trike ; end ;
28813: LD_ADDR_VAR 0 7
28817: PUSH
28818: LD_INT 12
28820: ST_TO_ADDR
28821: GO 28824
28823: POP
// end ; 2 :
28824: GO 29088
28826: LD_INT 2
28828: DOUBLE
28829: EQUAL
28830: IFTRUE 28834
28832: GO 28983
28834: POP
// begin if ( not flat_land ) and TrackExtension ( factory ) then
28835: LD_LOC 58
28839: NOT
28840: PUSH
28841: LD_VAR 0 3
28845: PPUSH
28846: CALL 27569 0 1
28850: AND
28851: IFFALSE 28918
// case nation of 1 :
28853: LD_VAR 0 2
28857: PUSH
28858: LD_INT 1
28860: DOUBLE
28861: EQUAL
28862: IFTRUE 28866
28864: GO 28877
28866: POP
// vysledek := us_medium_tracked ; 2 :
28867: LD_ADDR_VAR 0 7
28871: PUSH
28872: LD_INT 3
28874: ST_TO_ADDR
28875: GO 28916
28877: LD_INT 2
28879: DOUBLE
28880: EQUAL
28881: IFTRUE 28885
28883: GO 28896
28885: POP
// vysledek := ar_half_tracked ; 3 :
28886: LD_ADDR_VAR 0 7
28890: PUSH
28891: LD_INT 14
28893: ST_TO_ADDR
28894: GO 28916
28896: LD_INT 3
28898: DOUBLE
28899: EQUAL
28900: IFTRUE 28904
28902: GO 28915
28904: POP
// vysledek := ru_medium_tracked ; end else
28905: LD_ADDR_VAR 0 7
28909: PUSH
28910: LD_INT 22
28912: ST_TO_ADDR
28913: GO 28916
28915: POP
28916: GO 28981
// case nation of 1 :
28918: LD_VAR 0 2
28922: PUSH
28923: LD_INT 1
28925: DOUBLE
28926: EQUAL
28927: IFTRUE 28931
28929: GO 28942
28931: POP
// vysledek := us_medium_wheeled ; 2 :
28932: LD_ADDR_VAR 0 7
28936: PUSH
28937: LD_INT 2
28939: ST_TO_ADDR
28940: GO 28981
28942: LD_INT 2
28944: DOUBLE
28945: EQUAL
28946: IFTRUE 28950
28948: GO 28961
28950: POP
// vysledek := ar_medium_trike ; 3 :
28951: LD_ADDR_VAR 0 7
28955: PUSH
28956: LD_INT 13
28958: ST_TO_ADDR
28959: GO 28981
28961: LD_INT 3
28963: DOUBLE
28964: EQUAL
28965: IFTRUE 28969
28967: GO 28980
28969: POP
// vysledek := ru_medium_wheeled ; end end ; 3 :
28970: LD_ADDR_VAR 0 7
28974: PUSH
28975: LD_INT 21
28977: ST_TO_ADDR
28978: GO 28981
28980: POP
28981: GO 29088
28983: LD_INT 3
28985: DOUBLE
28986: EQUAL
28987: IFTRUE 28991
28989: GO 29087
28991: POP
// begin case nation of 1 :
28992: LD_VAR 0 2
28996: PUSH
28997: LD_INT 1
28999: DOUBLE
29000: EQUAL
29001: IFTRUE 29005
29003: GO 29044
29005: POP
// if GetTech ( side , tech_AdvChassis ) = state_researched then
29006: LD_VAR 0 1
29010: PPUSH
29011: LD_INT 36
29013: PPUSH
29014: CALL_OW 321
29018: PUSH
29019: LD_INT 2
29021: EQUAL
29022: IFFALSE 29034
// vysledek := us_morphling else
29024: LD_ADDR_VAR 0 7
29028: PUSH
29029: LD_INT 5
29031: ST_TO_ADDR
29032: GO 29042
// vysledek := us_heavy_tracked ; 3 :
29034: LD_ADDR_VAR 0 7
29038: PUSH
29039: LD_INT 4
29041: ST_TO_ADDR
29042: GO 29085
29044: LD_INT 3
29046: DOUBLE
29047: EQUAL
29048: IFTRUE 29052
29050: GO 29084
29052: POP
// if TrackExtension ( factory ) then
29053: LD_VAR 0 3
29057: PPUSH
29058: CALL 27569 0 1
29062: IFFALSE 29074
// vysledek := ru_heavy_tracked else
29064: LD_ADDR_VAR 0 7
29068: PUSH
29069: LD_INT 24
29071: ST_TO_ADDR
29072: GO 29082
// vysledek := ru_heavy_wheeled ; end end ; end ;
29074: LD_ADDR_VAR 0 7
29078: PUSH
29079: LD_INT 23
29081: ST_TO_ADDR
29082: GO 29085
29084: POP
29085: GO 29088
29087: POP
// result := vysledek ;
29088: LD_ADDR_VAR 0 5
29092: PUSH
29093: LD_VAR 0 7
29097: ST_TO_ADDR
// end ;
29098: LD_VAR 0 5
29102: RET
// function ChassisWeight ( nation , weapon ) ; var chassis , un , vysledek , weapon_list ; begin
29103: LD_INT 0
29105: PPUSH
29106: PPUSH
29107: PPUSH
29108: PPUSH
29109: PPUSH
// case nation of 1 :
29110: LD_VAR 0 1
29114: PUSH
29115: LD_INT 1
29117: DOUBLE
29118: EQUAL
29119: IFTRUE 29123
29121: GO 29136
29123: POP
// weapon_list := us_weapons ; 2 :
29124: LD_ADDR_VAR 0 7
29128: PUSH
29129: LD_LOC 50
29133: ST_TO_ADDR
29134: GO 29179
29136: LD_INT 2
29138: DOUBLE
29139: EQUAL
29140: IFTRUE 29144
29142: GO 29157
29144: POP
// weapon_list := ar_weapons ; 3 :
29145: LD_ADDR_VAR 0 7
29149: PUSH
29150: LD_LOC 51
29154: ST_TO_ADDR
29155: GO 29179
29157: LD_INT 3
29159: DOUBLE
29160: EQUAL
29161: IFTRUE 29165
29163: GO 29178
29165: POP
// weapon_list := ru_weapons ; end ;
29166: LD_ADDR_VAR 0 7
29170: PUSH
29171: LD_LOC 52
29175: ST_TO_ADDR
29176: GO 29179
29178: POP
// vysledek := false ;
29179: LD_ADDR_VAR 0 6
29183: PUSH
29184: LD_INT 0
29186: ST_TO_ADDR
// for chassis = 1 to 3 do
29187: LD_ADDR_VAR 0 4
29191: PUSH
29192: DOUBLE
29193: LD_INT 1
29195: DEC
29196: ST_TO_ADDR
29197: LD_INT 3
29199: PUSH
29200: FOR_TO
29201: IFFALSE 29263
// if not vysledek then
29203: LD_VAR 0 6
29207: NOT
29208: IFFALSE 29261
// for un in weapon_list [ chassis ] do
29210: LD_ADDR_VAR 0 5
29214: PUSH
29215: LD_VAR 0 7
29219: PUSH
29220: LD_VAR 0 4
29224: ARRAY
29225: PUSH
29226: FOR_IN
29227: IFFALSE 29259
// if weapon = un [ 1 ] then
29229: LD_VAR 0 2
29233: PUSH
29234: LD_VAR 0 5
29238: PUSH
29239: LD_INT 1
29241: ARRAY
29242: EQUAL
29243: IFFALSE 29257
// begin vysledek := chassis ;
29245: LD_ADDR_VAR 0 6
29249: PUSH
29250: LD_VAR 0 4
29254: ST_TO_ADDR
// break ;
29255: GO 29259
// end ;
29257: GO 29226
29259: POP
29260: POP
29261: GO 29200
29263: POP
29264: POP
// result := vysledek ;
29265: LD_ADDR_VAR 0 3
29269: PUSH
29270: LD_VAR 0 6
29274: ST_TO_ADDR
// end ;
29275: LD_VAR 0 3
29279: RET
// function ApemanCanDrive ( side ) ; var un ; begin
29280: LD_INT 0
29282: PPUSH
29283: PPUSH
// result := ( GetTech ( side , tech_ApeNeural ) = state_researched ) and FilterAllUnits ( [ [ f_side , side ] , [ f_class , class_apeman ] ] ) ;
29284: LD_ADDR_VAR 0 2
29288: PUSH
29289: LD_VAR 0 1
29293: PPUSH
29294: LD_INT 3
29296: PPUSH
29297: CALL_OW 321
29301: PUSH
29302: LD_INT 2
29304: EQUAL
29305: PUSH
29306: LD_INT 22
29308: PUSH
29309: LD_VAR 0 1
29313: PUSH
29314: EMPTY
29315: LIST
29316: LIST
29317: PUSH
29318: LD_INT 25
29320: PUSH
29321: LD_INT 12
29323: PUSH
29324: EMPTY
29325: LIST
29326: LIST
29327: PUSH
29328: EMPTY
29329: LIST
29330: LIST
29331: PPUSH
29332: CALL_OW 69
29336: AND
29337: ST_TO_ADDR
// end ;
29338: LD_VAR 0 2
29342: RET
// function transfer_mechanics ( side , mechanics , factory , components ) ; var un , isin ; begin
29343: LD_INT 0
29345: PPUSH
29346: PPUSH
29347: PPUSH
// isin := UnitsInside ( factory ) ;
29348: LD_ADDR_VAR 0 7
29352: PUSH
29353: LD_VAR 0 3
29357: PPUSH
29358: CALL_OW 313
29362: ST_TO_ADDR
// if ( 0 + isin ) > 5 then
29363: LD_INT 0
29365: PUSH
29366: LD_VAR 0 7
29370: PLUS
29371: PUSH
29372: LD_INT 5
29374: GREATER
29375: IFFALSE 29387
// begin result := true ;
29377: LD_ADDR_VAR 0 5
29381: PUSH
29382: LD_INT 1
29384: ST_TO_ADDR
// exit ;
29385: GO 29609
// end ; un := true ;
29387: LD_ADDR_VAR 0 6
29391: PUSH
29392: LD_INT 1
29394: ST_TO_ADDR
// if side = ar then
29395: LD_VAR 0 1
29399: PUSH
29400: LD_EXP 4
29404: EQUAL
29405: IFFALSE 29435
// mechanics := UnitFilter ( mechanics , [ f_not , [ f_driving ] ] ) ;
29407: LD_ADDR_VAR 0 2
29411: PUSH
29412: LD_VAR 0 2
29416: PPUSH
29417: LD_INT 3
29419: PUSH
29420: LD_INT 55
29422: PUSH
29423: EMPTY
29424: LIST
29425: PUSH
29426: EMPTY
29427: LIST
29428: LIST
29429: PPUSH
29430: CALL_OW 72
29434: ST_TO_ADDR
// ComEnterUnit ( mechanics , factory ) ;
29435: LD_VAR 0 2
29439: PPUSH
29440: LD_VAR 0 3
29444: PPUSH
29445: CALL_OW 120
// if components [ 3 ] = control_apeman then
29449: LD_VAR 0 4
29453: PUSH
29454: LD_INT 3
29456: ARRAY
29457: PUSH
29458: LD_INT 5
29460: EQUAL
29461: IFFALSE 29599
// begin un := FilterAllUnits ( [ [ f_side , side ] , [ f_class , class_apeman ] , [ f_not , [ f_hastask ] ] ] ) ;
29463: LD_ADDR_VAR 0 6
29467: PUSH
29468: LD_INT 22
29470: PUSH
29471: LD_VAR 0 1
29475: PUSH
29476: EMPTY
29477: LIST
29478: LIST
29479: PUSH
29480: LD_INT 25
29482: PUSH
29483: LD_INT 12
29485: PUSH
29486: EMPTY
29487: LIST
29488: LIST
29489: PUSH
29490: LD_INT 3
29492: PUSH
29493: LD_INT 60
29495: PUSH
29496: EMPTY
29497: LIST
29498: PUSH
29499: EMPTY
29500: LIST
29501: LIST
29502: PUSH
29503: EMPTY
29504: LIST
29505: LIST
29506: LIST
29507: PPUSH
29508: CALL_OW 69
29512: ST_TO_ADDR
// if un then
29513: LD_VAR 0 6
29517: IFFALSE 29539
// ComEnterUnit ( un [ 1 ] , factory ) else
29519: LD_VAR 0 6
29523: PUSH
29524: LD_INT 1
29526: ARRAY
29527: PPUSH
29528: LD_VAR 0 3
29532: PPUSH
29533: CALL_OW 120
29537: GO 29599
// begin un := FilterAllUnits ( [ [ f_side , side ] , [ f_class , class_apeman ] ] ) ;
29539: LD_ADDR_VAR 0 6
29543: PUSH
29544: LD_INT 22
29546: PUSH
29547: LD_VAR 0 1
29551: PUSH
29552: EMPTY
29553: LIST
29554: LIST
29555: PUSH
29556: LD_INT 25
29558: PUSH
29559: LD_INT 12
29561: PUSH
29562: EMPTY
29563: LIST
29564: LIST
29565: PUSH
29566: EMPTY
29567: LIST
29568: LIST
29569: PPUSH
29570: CALL_OW 69
29574: ST_TO_ADDR
// if un then
29575: LD_VAR 0 6
29579: IFFALSE 29599
// ComEnterUnit ( un [ 1 ] , factory ) ;
29581: LD_VAR 0 6
29585: PUSH
29586: LD_INT 1
29588: ARRAY
29589: PPUSH
29590: LD_VAR 0 3
29594: PPUSH
29595: CALL_OW 120
// end ; end ; result := un ;
29599: LD_ADDR_VAR 0 5
29603: PUSH
29604: LD_VAR 0 6
29608: ST_TO_ADDR
// end ;
29609: LD_VAR 0 5
29613: RET
// function start_building_vehicle ( nation , factory , vehicle ) ; begin
29614: LD_INT 0
29616: PPUSH
// while ( not UnitsInside ( factory ) ) and ( nation <> ar ) do
29617: LD_VAR 0 2
29621: PPUSH
29622: CALL_OW 313
29626: NOT
29627: PUSH
29628: LD_VAR 0 1
29632: PUSH
29633: LD_EXP 4
29637: NONEQUAL
29638: AND
29639: IFFALSE 29650
// wait ( 0 0$1 ) ;
29641: LD_INT 35
29643: PPUSH
29644: CALL_OW 67
29648: GO 29617
// if vehicle [ 3 ] = control_apeman then
29650: LD_VAR 0 3
29654: PUSH
29655: LD_INT 3
29657: ARRAY
29658: PUSH
29659: LD_INT 5
29661: EQUAL
29662: IFFALSE 29685
// while not ApemanInFactory ( factory ) do
29664: LD_VAR 0 2
29668: PPUSH
29669: CALL 29752 0 1
29673: NOT
29674: IFFALSE 29685
// wait ( 0 0$1 ) ;
29676: LD_INT 35
29678: PPUSH
29679: CALL_OW 67
29683: GO 29664
// ComChangeProfession ( UnitsInside ( factory ) , class_mechanic ) ;
29685: LD_VAR 0 2
29689: PPUSH
29690: CALL_OW 313
29694: PPUSH
29695: LD_INT 3
29697: PPUSH
29698: CALL_OW 123
// ComConstruct ( factory , vehicle [ 1 ] , vehicle [ 2 ] , vehicle [ 3 ] , vehicle [ 4 ] ) ;
29702: LD_VAR 0 2
29706: PPUSH
29707: LD_VAR 0 3
29711: PUSH
29712: LD_INT 1
29714: ARRAY
29715: PPUSH
29716: LD_VAR 0 3
29720: PUSH
29721: LD_INT 2
29723: ARRAY
29724: PPUSH
29725: LD_VAR 0 3
29729: PUSH
29730: LD_INT 3
29732: ARRAY
29733: PPUSH
29734: LD_VAR 0 3
29738: PUSH
29739: LD_INT 4
29741: ARRAY
29742: PPUSH
29743: CALL_OW 125
// end ;
29747: LD_VAR 0 4
29751: RET
// function ApemanInFactory ( factory ) ; var un , list , vysledek ; begin
29752: LD_INT 0
29754: PPUSH
29755: PPUSH
29756: PPUSH
29757: PPUSH
// vysledek := false ;
29758: LD_ADDR_VAR 0 5
29762: PUSH
29763: LD_INT 0
29765: ST_TO_ADDR
// list := UnitsInside ( factory ) ;
29766: LD_ADDR_VAR 0 4
29770: PUSH
29771: LD_VAR 0 1
29775: PPUSH
29776: CALL_OW 313
29780: ST_TO_ADDR
// for un in list do
29781: LD_ADDR_VAR 0 3
29785: PUSH
29786: LD_VAR 0 4
29790: PUSH
29791: FOR_IN
29792: IFFALSE 29821
// if GetClass ( un ) = class_apeman then
29794: LD_VAR 0 3
29798: PPUSH
29799: CALL_OW 257
29803: PUSH
29804: LD_INT 12
29806: EQUAL
29807: IFFALSE 29819
// begin vysledek := true ;
29809: LD_ADDR_VAR 0 5
29813: PUSH
29814: LD_INT 1
29816: ST_TO_ADDR
// break ;
29817: GO 29821
// end ;
29819: GO 29791
29821: POP
29822: POP
// result := vysledek ;
29823: LD_ADDR_VAR 0 2
29827: PUSH
29828: LD_VAR 0 5
29832: ST_TO_ADDR
// end ;
29833: LD_VAR 0 2
29837: RET
// function cleanup_extensions ( side , nation , factory ) ; var un , list , crane , cargo_bay , nation_crane , nation_cargo ; begin
29838: LD_INT 0
29840: PPUSH
29841: PPUSH
29842: PPUSH
29843: PPUSH
29844: PPUSH
29845: PPUSH
29846: PPUSH
// case nation of 1 :
29847: LD_VAR 0 2
29851: PUSH
29852: LD_INT 1
29854: DOUBLE
29855: EQUAL
29856: IFTRUE 29860
29858: GO 29879
29860: POP
// begin nation_cargo := us_cargo_bay ;
29861: LD_ADDR_VAR 0 10
29865: PUSH
29866: LD_INT 12
29868: ST_TO_ADDR
// nation_crane := us_crane ;
29869: LD_ADDR_VAR 0 9
29873: PUSH
29874: LD_INT 13
29876: ST_TO_ADDR
// end ; 2 :
29877: GO 29934
29879: LD_INT 2
29881: DOUBLE
29882: EQUAL
29883: IFTRUE 29887
29885: GO 29906
29887: POP
// begin nation_cargo := ar_cargo_bay ;
29888: LD_ADDR_VAR 0 10
29892: PUSH
29893: LD_INT 32
29895: ST_TO_ADDR
// nation_crane := 0 ;
29896: LD_ADDR_VAR 0 9
29900: PUSH
29901: LD_INT 0
29903: ST_TO_ADDR
// end ; 3 :
29904: GO 29934
29906: LD_INT 3
29908: DOUBLE
29909: EQUAL
29910: IFTRUE 29914
29912: GO 29933
29914: POP
// begin nation_cargo := ru_cargo_bay ;
29915: LD_ADDR_VAR 0 10
29919: PUSH
29920: LD_INT 51
29922: ST_TO_ADDR
// nation_crane := ru_crane ;
29923: LD_ADDR_VAR 0 9
29927: PUSH
29928: LD_INT 52
29930: ST_TO_ADDR
// end ; end ;
29931: GO 29934
29933: POP
// cargo_bay := FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_vehicle ] , [ f_weapon , nation_cargo ] ] ) ;
29934: LD_ADDR_VAR 0 8
29938: PUSH
29939: LD_INT 22
29941: PUSH
29942: LD_VAR 0 1
29946: PUSH
29947: EMPTY
29948: LIST
29949: LIST
29950: PUSH
29951: LD_INT 21
29953: PUSH
29954: LD_INT 2
29956: PUSH
29957: EMPTY
29958: LIST
29959: LIST
29960: PUSH
29961: LD_INT 34
29963: PUSH
29964: LD_VAR 0 10
29968: PUSH
29969: EMPTY
29970: LIST
29971: LIST
29972: PUSH
29973: EMPTY
29974: LIST
29975: LIST
29976: LIST
29977: PPUSH
29978: CALL_OW 69
29982: ST_TO_ADDR
// crane := FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_vehicle ] , [ f_weapon , nation_crane ] ] ) ;
29983: LD_ADDR_VAR 0 7
29987: PUSH
29988: LD_INT 22
29990: PUSH
29991: LD_VAR 0 1
29995: PUSH
29996: EMPTY
29997: LIST
29998: LIST
29999: PUSH
30000: LD_INT 21
30002: PUSH
30003: LD_INT 2
30005: PUSH
30006: EMPTY
30007: LIST
30008: LIST
30009: PUSH
30010: LD_INT 34
30012: PUSH
30013: LD_VAR 0 9
30017: PUSH
30018: EMPTY
30019: LIST
30020: LIST
30021: PUSH
30022: EMPTY
30023: LIST
30024: LIST
30025: LIST
30026: PPUSH
30027: CALL_OW 69
30031: ST_TO_ADDR
// if ( nation_crane in extension_wanted ) and crane then
30032: LD_VAR 0 9
30036: PUSH
30037: LD_EXP 70
30041: IN
30042: PUSH
30043: LD_VAR 0 7
30047: AND
30048: IFFALSE 30066
// extension_wanted := extension_wanted diff nation_crane ;
30050: LD_ADDR_EXP 70
30054: PUSH
30055: LD_EXP 70
30059: PUSH
30060: LD_VAR 0 9
30064: DIFF
30065: ST_TO_ADDR
// if ( nation_cargo in extension_wanted ) and cargo_bay then
30066: LD_VAR 0 10
30070: PUSH
30071: LD_EXP 70
30075: IN
30076: PUSH
30077: LD_VAR 0 8
30081: AND
30082: IFFALSE 30100
// extension_wanted := extension_wanted diff nation_cargo ;
30084: LD_ADDR_EXP 70
30088: PUSH
30089: LD_EXP 70
30093: PUSH
30094: LD_VAR 0 10
30098: DIFF
30099: ST_TO_ADDR
// list := extension_wanted ;
30100: LD_ADDR_VAR 0 6
30104: PUSH
30105: LD_EXP 70
30109: ST_TO_ADDR
// for un in list do
30110: LD_ADDR_VAR 0 5
30114: PUSH
30115: LD_VAR 0 6
30119: PUSH
30120: FOR_IN
30121: IFFALSE 30154
// begin if not un in main_extensions then
30123: LD_VAR 0 5
30127: PUSH
30128: LD_LOC 56
30132: IN
30133: NOT
30134: IFFALSE 30152
// extension_wanted := extension_wanted diff un ;
30136: LD_ADDR_EXP 70
30140: PUSH
30141: LD_EXP 70
30145: PUSH
30146: LD_VAR 0 5
30150: DIFF
30151: ST_TO_ADDR
// end ;
30152: GO 30120
30154: POP
30155: POP
// end ; end_of_file
30156: LD_VAR 0 4
30160: RET
// var mc_list ; var b_list ; export function init_keep_base ; var un , build , side ; begin
30161: LD_INT 0
30163: PPUSH
30164: PPUSH
30165: PPUSH
30166: PPUSH
// b_list := [ ] ;
30167: LD_ADDR_LOC 60
30171: PUSH
30172: EMPTY
30173: ST_TO_ADDR
// mc_list := [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ;
30174: LD_ADDR_LOC 59
30178: PUSH
30179: LD_INT 0
30181: PUSH
30182: LD_INT 0
30184: PUSH
30185: LD_INT 0
30187: PUSH
30188: LD_INT 0
30190: PUSH
30191: LD_INT 0
30193: PUSH
30194: LD_INT 0
30196: PUSH
30197: LD_INT 0
30199: PUSH
30200: LD_INT 0
30202: PUSH
30203: EMPTY
30204: LIST
30205: LIST
30206: LIST
30207: LIST
30208: LIST
30209: LIST
30210: LIST
30211: LIST
30212: ST_TO_ADDR
// for side = 1 to 8 do
30213: LD_ADDR_VAR 0 4
30217: PUSH
30218: DOUBLE
30219: LD_INT 1
30221: DEC
30222: ST_TO_ADDR
30223: LD_INT 8
30225: PUSH
30226: FOR_TO
30227: IFFALSE 30342
// if side in cpu_list then
30229: LD_VAR 0 4
30233: PUSH
30234: LD_EXP 8
30238: IN
30239: IFFALSE 30324
// begin un := FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_building ] ] ) ;
30241: LD_ADDR_VAR 0 2
30245: PUSH
30246: LD_INT 22
30248: PUSH
30249: LD_VAR 0 4
30253: PUSH
30254: EMPTY
30255: LIST
30256: LIST
30257: PUSH
30258: LD_INT 21
30260: PUSH
30261: LD_INT 3
30263: PUSH
30264: EMPTY
30265: LIST
30266: LIST
30267: PUSH
30268: EMPTY
30269: LIST
30270: LIST
30271: PPUSH
30272: CALL_OW 69
30276: ST_TO_ADDR
// if un then
30277: LD_VAR 0 2
30281: IFFALSE 30322
// b_list := Insert ( b_list , side , GetBuildList ( GetBase ( un [ 1 ] ) ) ) ;
30283: LD_ADDR_LOC 60
30287: PUSH
30288: LD_LOC 60
30292: PPUSH
30293: LD_VAR 0 4
30297: PPUSH
30298: LD_VAR 0 2
30302: PUSH
30303: LD_INT 1
30305: ARRAY
30306: PPUSH
30307: CALL_OW 274
30311: PPUSH
30312: CALL_OW 417
30316: PPUSH
30317: CALL_OW 2
30321: ST_TO_ADDR
// end else
30322: GO 30340
// b_list := b_list ^ [ [ ] ] ;
30324: LD_ADDR_LOC 60
30328: PUSH
30329: LD_LOC 60
30333: PUSH
30334: EMPTY
30335: PUSH
30336: EMPTY
30337: LIST
30338: ADD
30339: ST_TO_ADDR
30340: GO 30226
30342: POP
30343: POP
// end ;
30344: LD_VAR 0 1
30348: RET
// every 0 0$5.2 trigger us in cpu_list do var side , list , engineers ;
30349: LD_EXP 3
30353: PUSH
30354: LD_EXP 8
30358: IN
30359: IFFALSE 30564
30361: GO 30363
30363: DISABLE
30364: LD_INT 0
30366: PPUSH
30367: PPUSH
30368: PPUSH
// begin list := [ ] ;
30369: LD_ADDR_VAR 0 2
30373: PUSH
30374: EMPTY
30375: ST_TO_ADDR
// for side = 1 to 8 do
30376: LD_ADDR_VAR 0 1
30380: PUSH
30381: DOUBLE
30382: LD_INT 1
30384: DEC
30385: ST_TO_ADDR
30386: LD_INT 8
30388: PUSH
30389: FOR_TO
30390: IFFALSE 30551
// if ( side in cpu_list ) then
30392: LD_VAR 0 1
30396: PUSH
30397: LD_EXP 8
30401: IN
30402: IFFALSE 30535
// begin if not ExistMc ( mc_list [ side ] ) then
30404: LD_LOC 59
30408: PUSH
30409: LD_VAR 0 1
30413: ARRAY
30414: PPUSH
30415: CALL_OW 386
30419: NOT
30420: IFFALSE 30511
// begin engineers := request_people ( side , class_engineer , 5 ) ;
30422: LD_ADDR_VAR 0 3
30426: PUSH
30427: LD_VAR 0 1
30431: PPUSH
30432: LD_INT 2
30434: PPUSH
30435: LD_INT 5
30437: PPUSH
30438: CALL 24656 0 3
30442: ST_TO_ADDR
// if engineers then
30443: LD_VAR 0 3
30447: IFFALSE 30495
// list := list ^ McBase ( 3 , engineers , b_list [ side ] , 0 , 0 , 0 ) else
30449: LD_ADDR_VAR 0 2
30453: PUSH
30454: LD_VAR 0 2
30458: PUSH
30459: LD_INT 3
30461: PPUSH
30462: LD_VAR 0 3
30466: PPUSH
30467: LD_LOC 60
30471: PUSH
30472: LD_VAR 0 1
30476: ARRAY
30477: PPUSH
30478: LD_INT 0
30480: PPUSH
30481: LD_INT 0
30483: PPUSH
30484: LD_INT 0
30486: PPUSH
30487: CALL_OW 397
30491: ADD
30492: ST_TO_ADDR
30493: GO 30509
// list := list ^ 0 end else
30495: LD_ADDR_VAR 0 2
30499: PUSH
30500: LD_VAR 0 2
30504: PUSH
30505: LD_INT 0
30507: ADD
30508: ST_TO_ADDR
30509: GO 30533
// list := list ^ mc_list [ side ] ;
30511: LD_ADDR_VAR 0 2
30515: PUSH
30516: LD_VAR 0 2
30520: PUSH
30521: LD_LOC 59
30525: PUSH
30526: LD_VAR 0 1
30530: ARRAY
30531: ADD
30532: ST_TO_ADDR
// end else
30533: GO 30549
// list := list ^ 0 ;
30535: LD_ADDR_VAR 0 2
30539: PUSH
30540: LD_VAR 0 2
30544: PUSH
30545: LD_INT 0
30547: ADD
30548: ST_TO_ADDR
30549: GO 30389
30551: POP
30552: POP
// mc_list := list ;
30553: LD_ADDR_LOC 59
30557: PUSH
30558: LD_VAR 0 2
30562: ST_TO_ADDR
// enable ;
30563: ENABLE
// end ; end_of_file
30564: PPOPN 3
30566: END
// var load_global , load_local_cpu , load_local_you ; var global_delay , cpu_delay , you_delay ; var crates_loading_area ; export function init_crates_loading ; begin
30567: LD_INT 0
30569: PPUSH
// global_delay := 10 10$0 ;
30570: LD_ADDR_LOC 64
30574: PUSH
30575: LD_INT 21000
30577: ST_TO_ADDR
// cpu_delay := 0 0$90 ;
30578: LD_ADDR_LOC 65
30582: PUSH
30583: LD_INT 3150
30585: ST_TO_ADDR
// you_delay := 3 3$30 ;
30586: LD_ADDR_LOC 66
30590: PUSH
30591: LD_INT 7350
30593: ST_TO_ADDR
// load_global := TICK + Rand ( global_delay - 0 0$40 , global_delay + 0 0$60 ) ;
30594: LD_ADDR_LOC 61
30598: PUSH
30599: LD_OWVAR 1
30603: PUSH
30604: LD_LOC 64
30608: PUSH
30609: LD_INT 1400
30611: MINUS
30612: PPUSH
30613: LD_LOC 64
30617: PUSH
30618: LD_INT 2100
30620: PLUS
30621: PPUSH
30622: CALL_OW 12
30626: PLUS
30627: ST_TO_ADDR
// load_local_cpu := TICK + Rand ( cpu_delay - 0 0$20 , cpu_delay + 0 0$20 ) ;
30628: LD_ADDR_LOC 62
30632: PUSH
30633: LD_OWVAR 1
30637: PUSH
30638: LD_LOC 65
30642: PUSH
30643: LD_INT 700
30645: MINUS
30646: PPUSH
30647: LD_LOC 65
30651: PUSH
30652: LD_INT 700
30654: PLUS
30655: PPUSH
30656: CALL_OW 12
30660: PLUS
30661: ST_TO_ADDR
// load_local_you := TICK + Rand ( you_delay - 0 0$20 , you_delay + 0 0$20 ) ;
30662: LD_ADDR_LOC 63
30666: PUSH
30667: LD_OWVAR 1
30671: PUSH
30672: LD_LOC 66
30676: PUSH
30677: LD_INT 700
30679: MINUS
30680: PPUSH
30681: LD_LOC 66
30685: PUSH
30686: LD_INT 700
30688: PLUS
30689: PPUSH
30690: CALL_OW 12
30694: PLUS
30695: ST_TO_ADDR
// crates_loading_area := [ us_crates , ar_crates , ru_crates ] ;
30696: LD_ADDR_LOC 67
30700: PUSH
30701: LD_INT 1
30703: PUSH
30704: LD_INT 3
30706: PUSH
30707: LD_INT 2
30709: PUSH
30710: EMPTY
30711: LIST
30712: LIST
30713: LIST
30714: ST_TO_ADDR
// end ;
30715: LD_VAR 0 1
30719: RET
// every 0 0$5.1 trigger TICK > load_global do var c , sur , i ;
30720: LD_OWVAR 1
30724: PUSH
30725: LD_LOC 61
30729: GREATER
30730: IFFALSE 30903
30732: GO 30734
30734: DISABLE
30735: LD_INT 0
30737: PPUSH
30738: PPUSH
30739: PPUSH
// begin c := RandHex ( false ) ;
30740: LD_ADDR_VAR 0 1
30744: PUSH
30745: LD_INT 0
30747: PPUSH
30748: CALL_OW 15
30752: ST_TO_ADDR
// sur := [ ] ;
30753: LD_ADDR_VAR 0 2
30757: PUSH
30758: EMPTY
30759: ST_TO_ADDR
// for i = 1 to 4 do
30760: LD_ADDR_VAR 0 3
30764: PUSH
30765: DOUBLE
30766: LD_INT 1
30768: DEC
30769: ST_TO_ADDR
30770: LD_INT 4
30772: PUSH
30773: FOR_TO
30774: IFFALSE 30821
// sur := sur ^ [ RandHexXYR ( c [ 1 ] , c [ 2 ] , 1 , false ) ] ;
30776: LD_ADDR_VAR 0 2
30780: PUSH
30781: LD_VAR 0 2
30785: PUSH
30786: LD_VAR 0 1
30790: PUSH
30791: LD_INT 1
30793: ARRAY
30794: PPUSH
30795: LD_VAR 0 1
30799: PUSH
30800: LD_INT 2
30802: ARRAY
30803: PPUSH
30804: LD_INT 1
30806: PPUSH
30807: LD_INT 0
30809: PPUSH
30810: CALL_OW 17
30814: PUSH
30815: EMPTY
30816: LIST
30817: ADD
30818: ST_TO_ADDR
30819: GO 30773
30821: POP
30822: POP
// for i in sur do
30823: LD_ADDR_VAR 0 3
30827: PUSH
30828: LD_VAR 0 2
30832: PUSH
30833: FOR_IN
30834: IFFALSE 30866
// CreateCratesXY ( 5 , i [ 1 ] , i [ 2 ] , true ) ;
30836: LD_INT 5
30838: PPUSH
30839: LD_VAR 0 3
30843: PUSH
30844: LD_INT 1
30846: ARRAY
30847: PPUSH
30848: LD_VAR 0 3
30852: PUSH
30853: LD_INT 2
30855: ARRAY
30856: PPUSH
30857: LD_INT 1
30859: PPUSH
30860: CALL_OW 54
30864: GO 30833
30866: POP
30867: POP
// load_global := TICK + Rand ( global_delay - 0 0$40 , global_delay + 0 0$60 ) ;
30868: LD_ADDR_LOC 61
30872: PUSH
30873: LD_OWVAR 1
30877: PUSH
30878: LD_LOC 64
30882: PUSH
30883: LD_INT 1400
30885: MINUS
30886: PPUSH
30887: LD_LOC 64
30891: PUSH
30892: LD_INT 2100
30894: PLUS
30895: PPUSH
30896: CALL_OW 12
30900: PLUS
30901: ST_TO_ADDR
// enable ;
30902: ENABLE
// end ;
30903: PPOPN 3
30905: END
// every 0 0$5.4 trigger TICK > load_local_cpu do var un ;
30906: LD_OWVAR 1
30910: PUSH
30911: LD_LOC 62
30915: GREATER
30916: IFFALSE 31033
30918: GO 30920
30920: DISABLE
30921: LD_INT 0
30923: PPUSH
// begin if GetResourceArea ( us_crates , mat_cans ) < 250 then
30924: LD_INT 1
30926: PPUSH
30927: LD_INT 1
30929: PPUSH
30930: CALL_OW 287
30934: PUSH
30935: LD_INT 250
30937: LESS
30938: IFFALSE 30961
// CreateCratesArea ( Rand ( 3 , 5 ) , us_crates , true ) ;
30940: LD_INT 3
30942: PPUSH
30943: LD_INT 5
30945: PPUSH
30946: CALL_OW 12
30950: PPUSH
30951: LD_INT 1
30953: PPUSH
30954: LD_INT 1
30956: PPUSH
30957: CALL_OW 55
// if GetResourceArea ( ru_crates , mat_cans ) < 250 then
30961: LD_INT 2
30963: PPUSH
30964: LD_INT 1
30966: PPUSH
30967: CALL_OW 287
30971: PUSH
30972: LD_INT 250
30974: LESS
30975: IFFALSE 30998
// CreateCratesArea ( Rand ( 3 , 5 ) , ru_crates , true ) ;
30977: LD_INT 3
30979: PPUSH
30980: LD_INT 5
30982: PPUSH
30983: CALL_OW 12
30987: PPUSH
30988: LD_INT 2
30990: PPUSH
30991: LD_INT 1
30993: PPUSH
30994: CALL_OW 55
// load_local_cpu := TICK + Rand ( cpu_delay - 0 0$20 , cpu_delay + 0 0$20 ) ;
30998: LD_ADDR_LOC 62
31002: PUSH
31003: LD_OWVAR 1
31007: PUSH
31008: LD_LOC 65
31012: PUSH
31013: LD_INT 700
31015: MINUS
31016: PPUSH
31017: LD_LOC 65
31021: PUSH
31022: LD_INT 700
31024: PLUS
31025: PPUSH
31026: CALL_OW 12
31030: PLUS
31031: ST_TO_ADDR
// enable ;
31032: ENABLE
// end ;
31033: PPOPN 1
31035: END
// every 0 0$5.3 trigger TICK > load_local_you do
31036: LD_OWVAR 1
31040: PUSH
31041: LD_LOC 63
31045: GREATER
31046: IFFALSE 31123
31048: GO 31050
31050: DISABLE
// begin if GetResourceArea ( ar_crates , mat_cans ) < 250 then
31051: LD_INT 3
31053: PPUSH
31054: LD_INT 1
31056: PPUSH
31057: CALL_OW 287
31061: PUSH
31062: LD_INT 250
31064: LESS
31065: IFFALSE 31088
// CreateCratesArea ( Rand ( 1 , 5 ) , ar_crates , true ) ;
31067: LD_INT 1
31069: PPUSH
31070: LD_INT 5
31072: PPUSH
31073: CALL_OW 12
31077: PPUSH
31078: LD_INT 3
31080: PPUSH
31081: LD_INT 1
31083: PPUSH
31084: CALL_OW 55
// load_local_you := TICK + Rand ( you_delay - 0 0$20 , you_delay + 0 0$20 ) ;
31088: LD_ADDR_LOC 63
31092: PUSH
31093: LD_OWVAR 1
31097: PUSH
31098: LD_LOC 66
31102: PUSH
31103: LD_INT 700
31105: MINUS
31106: PPUSH
31107: LD_LOC 66
31111: PUSH
31112: LD_INT 700
31114: PLUS
31115: PPUSH
31116: CALL_OW 12
31120: PLUS
31121: ST_TO_ADDR
// enable ;
31122: ENABLE
// end ;
31123: END
// every 0 0$30.1 do var list , side , un , base ;
31124: GO 31126
31126: DISABLE
31127: LD_INT 0
31129: PPUSH
31130: PPUSH
31131: PPUSH
31132: PPUSH
// begin for side in cpu_list do
31133: LD_ADDR_VAR 0 2
31137: PUSH
31138: LD_EXP 8
31142: PUSH
31143: FOR_IN
31144: IFFALSE 31298
// begin list := FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_building ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) ;
31146: LD_ADDR_VAR 0 1
31150: PUSH
31151: LD_INT 22
31153: PUSH
31154: LD_VAR 0 2
31158: PUSH
31159: EMPTY
31160: LIST
31161: LIST
31162: PUSH
31163: LD_INT 21
31165: PUSH
31166: LD_INT 3
31168: PUSH
31169: EMPTY
31170: LIST
31171: LIST
31172: PUSH
31173: LD_INT 2
31175: PUSH
31176: LD_INT 30
31178: PUSH
31179: LD_INT 0
31181: PUSH
31182: EMPTY
31183: LIST
31184: LIST
31185: PUSH
31186: LD_INT 30
31188: PUSH
31189: LD_INT 1
31191: PUSH
31192: EMPTY
31193: LIST
31194: LIST
31195: PUSH
31196: EMPTY
31197: LIST
31198: LIST
31199: LIST
31200: PUSH
31201: EMPTY
31202: LIST
31203: LIST
31204: LIST
31205: PPUSH
31206: CALL_OW 69
31210: ST_TO_ADDR
// for un in list do
31211: LD_ADDR_VAR 0 3
31215: PUSH
31216: LD_VAR 0 1
31220: PUSH
31221: FOR_IN
31222: IFFALSE 31294
// begin base := GetBase ( un ) ;
31224: LD_ADDR_VAR 0 4
31228: PUSH
31229: LD_VAR 0 3
31233: PPUSH
31234: CALL_OW 274
31238: ST_TO_ADDR
// if GetResourceType ( base , mat_cans ) < 300 then
31239: LD_VAR 0 4
31243: PPUSH
31244: LD_INT 1
31246: PPUSH
31247: CALL_OW 275
31251: PUSH
31252: LD_INT 300
31254: LESS
31255: IFFALSE 31292
// SetResourceType ( base , mat_cans , GetResourceType ( base , mat_cans ) + ( difficulty * 30 ) ) ;
31257: LD_VAR 0 4
31261: PPUSH
31262: LD_INT 1
31264: PPUSH
31265: LD_VAR 0 4
31269: PPUSH
31270: LD_INT 1
31272: PPUSH
31273: CALL_OW 275
31277: PUSH
31278: LD_OWVAR 67
31282: PUSH
31283: LD_INT 30
31285: MUL
31286: PLUS
31287: PPUSH
31288: CALL_OW 277
// end ;
31292: GO 31221
31294: POP
31295: POP
// end ;
31296: GO 31143
31298: POP
31299: POP
// enable ;
31300: ENABLE
// end ; end_of_file
31301: PPOPN 4
31303: END
// var outside_list , inside_list ; var base_areas , create_areas ; var us_bay , ru_bay , ar_bay ; var us_bad , ru_bad , ar_bad ; export function init_crates_collecting ; begin
31304: LD_INT 0
31306: PPUSH
// outside_list := [ us_crates , ar_crates , ru_crates ] ;
31307: LD_ADDR_LOC 68
31311: PUSH
31312: LD_INT 1
31314: PUSH
31315: LD_INT 3
31317: PUSH
31318: LD_INT 2
31320: PUSH
31321: EMPTY
31322: LIST
31323: LIST
31324: LIST
31325: ST_TO_ADDR
// inside_list := [ us_base , ar_base , ru_base ] ;
31326: LD_ADDR_LOC 69
31330: PUSH
31331: LD_INT 11
31333: PUSH
31334: LD_INT 13
31336: PUSH
31337: LD_INT 12
31339: PUSH
31340: EMPTY
31341: LIST
31342: LIST
31343: LIST
31344: ST_TO_ADDR
// base_areas := [ us_base , ar_base , ru_base ] ;
31345: LD_ADDR_LOC 70
31349: PUSH
31350: LD_INT 11
31352: PUSH
31353: LD_INT 13
31355: PUSH
31356: LD_INT 12
31358: PUSH
31359: EMPTY
31360: LIST
31361: LIST
31362: LIST
31363: ST_TO_ADDR
// create_areas := [ us_create , ar_create , ru_create ] ;
31364: LD_ADDR_LOC 71
31368: PUSH
31369: LD_INT 18
31371: PUSH
31372: LD_INT 19
31374: PUSH
31375: LD_INT 17
31377: PUSH
31378: EMPTY
31379: LIST
31380: LIST
31381: LIST
31382: ST_TO_ADDR
// us_bad := [ ] ;
31383: LD_ADDR_LOC 75
31387: PUSH
31388: EMPTY
31389: ST_TO_ADDR
// ru_bad := [ ] ;
31390: LD_ADDR_LOC 76
31394: PUSH
31395: EMPTY
31396: ST_TO_ADDR
// ar_bad := [ ] ;
31397: LD_ADDR_LOC 77
31401: PUSH
31402: EMPTY
31403: ST_TO_ADDR
// end ;
31404: LD_VAR 0 1
31408: RET
// every 0 0$5.4 do var un , side , list , cargo , n_cargo , engineers ;
31409: GO 31411
31411: DISABLE
31412: LD_INT 0
31414: PPUSH
31415: PPUSH
31416: PPUSH
31417: PPUSH
31418: PPUSH
31419: PPUSH
// begin for side in cpu_list do
31420: LD_ADDR_VAR 0 2
31424: PUSH
31425: LD_EXP 8
31429: PUSH
31430: FOR_IN
31431: IFFALSE 31958
// begin list := GetListOfCratesInArea ( outside_list [ side ] ) ;
31433: LD_ADDR_VAR 0 3
31437: PUSH
31438: LD_LOC 68
31442: PUSH
31443: LD_VAR 0 2
31447: ARRAY
31448: PPUSH
31449: CALL_OW 435
31453: ST_TO_ADDR
// if list then
31454: LD_VAR 0 3
31458: IFFALSE 31826
// begin case side of 1 :
31460: LD_VAR 0 2
31464: PUSH
31465: LD_INT 1
31467: DOUBLE
31468: EQUAL
31469: IFTRUE 31473
31471: GO 31484
31473: POP
// n_cargo := us_cargo_bay ; 2 :
31474: LD_ADDR_VAR 0 5
31478: PUSH
31479: LD_INT 12
31481: ST_TO_ADDR
31482: GO 31523
31484: LD_INT 2
31486: DOUBLE
31487: EQUAL
31488: IFTRUE 31492
31490: GO 31503
31492: POP
// n_cargo := ar_cargo_bay ; 3 :
31493: LD_ADDR_VAR 0 5
31497: PUSH
31498: LD_INT 32
31500: ST_TO_ADDR
31501: GO 31523
31503: LD_INT 3
31505: DOUBLE
31506: EQUAL
31507: IFTRUE 31511
31509: GO 31522
31511: POP
// n_cargo := ru_cargo_bay ; end ;
31512: LD_ADDR_VAR 0 5
31516: PUSH
31517: LD_INT 51
31519: ST_TO_ADDR
31520: GO 31523
31522: POP
// cargo := FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_vehicle ] , [ f_weapon , n_cargo ] ] ) ;
31523: LD_ADDR_VAR 0 4
31527: PUSH
31528: LD_INT 22
31530: PUSH
31531: LD_VAR 0 2
31535: PUSH
31536: EMPTY
31537: LIST
31538: LIST
31539: PUSH
31540: LD_INT 21
31542: PUSH
31543: LD_INT 2
31545: PUSH
31546: EMPTY
31547: LIST
31548: LIST
31549: PUSH
31550: LD_INT 34
31552: PUSH
31553: LD_VAR 0 5
31557: PUSH
31558: EMPTY
31559: LIST
31560: LIST
31561: PUSH
31562: EMPTY
31563: LIST
31564: LIST
31565: LIST
31566: PPUSH
31567: CALL_OW 69
31571: ST_TO_ADDR
// if cargo then
31572: LD_VAR 0 4
31576: IFFALSE 31826
// begin cargo := cargo [ 1 ] ;
31578: LD_ADDR_VAR 0 4
31582: PUSH
31583: LD_VAR 0 4
31587: PUSH
31588: LD_INT 1
31590: ARRAY
31591: ST_TO_ADDR
// if ( not HasTask ( cargo ) ) and ( not ( [ list [ 1 ] , list [ 2 ] ] in ( us_bad ^ ru_bad ^ ar_bad ) ) ) then
31592: LD_VAR 0 4
31596: PPUSH
31597: CALL_OW 314
31601: NOT
31602: PUSH
31603: LD_VAR 0 3
31607: PUSH
31608: LD_INT 1
31610: ARRAY
31611: PUSH
31612: LD_VAR 0 3
31616: PUSH
31617: LD_INT 2
31619: ARRAY
31620: PUSH
31621: EMPTY
31622: LIST
31623: LIST
31624: PUSH
31625: LD_LOC 75
31629: PUSH
31630: LD_LOC 76
31634: ADD
31635: PUSH
31636: LD_LOC 77
31640: ADD
31641: IN
31642: NOT
31643: AND
31644: IFFALSE 31826
// begin ComCollect ( cargo , list [ 1 ] , list [ 2 ] ) ;
31646: LD_VAR 0 4
31650: PPUSH
31651: LD_VAR 0 3
31655: PUSH
31656: LD_INT 1
31658: ARRAY
31659: PPUSH
31660: LD_VAR 0 3
31664: PUSH
31665: LD_INT 2
31667: ARRAY
31668: PPUSH
31669: CALL_OW 117
// case side of us :
31673: LD_VAR 0 2
31677: PUSH
31678: LD_EXP 3
31682: DOUBLE
31683: EQUAL
31684: IFTRUE 31688
31686: GO 31727
31688: POP
// us_bay := us_bay ^ [ [ list [ 1 ] , list [ 2 ] ] ] ; ru :
31689: LD_ADDR_LOC 72
31693: PUSH
31694: LD_LOC 72
31698: PUSH
31699: LD_VAR 0 3
31703: PUSH
31704: LD_INT 1
31706: ARRAY
31707: PUSH
31708: LD_VAR 0 3
31712: PUSH
31713: LD_INT 2
31715: ARRAY
31716: PUSH
31717: EMPTY
31718: LIST
31719: LIST
31720: PUSH
31721: EMPTY
31722: LIST
31723: ADD
31724: ST_TO_ADDR
31725: GO 31826
31727: LD_EXP 2
31731: DOUBLE
31732: EQUAL
31733: IFTRUE 31737
31735: GO 31776
31737: POP
// ru_bay := ru_bay ^ [ [ list [ 1 ] , list [ 2 ] ] ] ; ar :
31738: LD_ADDR_LOC 73
31742: PUSH
31743: LD_LOC 73
31747: PUSH
31748: LD_VAR 0 3
31752: PUSH
31753: LD_INT 1
31755: ARRAY
31756: PUSH
31757: LD_VAR 0 3
31761: PUSH
31762: LD_INT 2
31764: ARRAY
31765: PUSH
31766: EMPTY
31767: LIST
31768: LIST
31769: PUSH
31770: EMPTY
31771: LIST
31772: ADD
31773: ST_TO_ADDR
31774: GO 31826
31776: LD_EXP 4
31780: DOUBLE
31781: EQUAL
31782: IFTRUE 31786
31784: GO 31825
31786: POP
// ar_bay := ar_bay ^ [ [ list [ 1 ] , list [ 2 ] ] ] ; end ;
31787: LD_ADDR_LOC 74
31791: PUSH
31792: LD_LOC 74
31796: PUSH
31797: LD_VAR 0 3
31801: PUSH
31802: LD_INT 1
31804: ARRAY
31805: PUSH
31806: LD_VAR 0 3
31810: PUSH
31811: LD_INT 2
31813: ARRAY
31814: PUSH
31815: EMPTY
31816: LIST
31817: LIST
31818: PUSH
31819: EMPTY
31820: LIST
31821: ADD
31822: ST_TO_ADDR
31823: GO 31826
31825: POP
// end ; end ; end ; list := GetListOfCratesInArea ( inside_list [ side ] ) ;
31826: LD_ADDR_VAR 0 3
31830: PUSH
31831: LD_LOC 69
31835: PUSH
31836: LD_VAR 0 2
31840: ARRAY
31841: PPUSH
31842: CALL_OW 435
31846: ST_TO_ADDR
// if list then
31847: LD_VAR 0 3
31851: IFFALSE 31956
// begin engineers := FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_human ] , [ f_class , class_engineer ] ] ) ;
31853: LD_ADDR_VAR 0 6
31857: PUSH
31858: LD_INT 22
31860: PUSH
31861: LD_VAR 0 2
31865: PUSH
31866: EMPTY
31867: LIST
31868: LIST
31869: PUSH
31870: LD_INT 21
31872: PUSH
31873: LD_INT 1
31875: PUSH
31876: EMPTY
31877: LIST
31878: LIST
31879: PUSH
31880: LD_INT 25
31882: PUSH
31883: LD_INT 2
31885: PUSH
31886: EMPTY
31887: LIST
31888: LIST
31889: PUSH
31890: EMPTY
31891: LIST
31892: LIST
31893: LIST
31894: PPUSH
31895: CALL_OW 69
31899: ST_TO_ADDR
// for un in engineers do
31900: LD_ADDR_VAR 0 1
31904: PUSH
31905: LD_VAR 0 6
31909: PUSH
31910: FOR_IN
31911: IFFALSE 31954
// if not GetUnitMc ( un ) then
31913: LD_VAR 0 1
31917: PPUSH
31918: CALL_OW 388
31922: NOT
31923: IFFALSE 31952
// ComCollect ( un , list [ 1 ] , list [ 2 ] ) ;
31925: LD_VAR 0 1
31929: PPUSH
31930: LD_VAR 0 3
31934: PUSH
31935: LD_INT 1
31937: ARRAY
31938: PPUSH
31939: LD_VAR 0 3
31943: PUSH
31944: LD_INT 2
31946: ARRAY
31947: PPUSH
31948: CALL_OW 117
31952: GO 31910
31954: POP
31955: POP
// end ; end ;
31956: GO 31430
31958: POP
31959: POP
// enable ;
31960: ENABLE
// end ;
31961: PPOPN 6
31963: END
// every 1 1$0.6 do var un , n_cargo , cargo , side ;
31964: GO 31966
31966: DISABLE
31967: LD_INT 0
31969: PPUSH
31970: PPUSH
31971: PPUSH
31972: PPUSH
// begin for side in cpu_list do
31973: LD_ADDR_VAR 0 4
31977: PUSH
31978: LD_EXP 8
31982: PUSH
31983: FOR_IN
31984: IFFALSE 32423
// begin case side of 1 :
31986: LD_VAR 0 4
31990: PUSH
31991: LD_INT 1
31993: DOUBLE
31994: EQUAL
31995: IFTRUE 31999
31997: GO 32010
31999: POP
// n_cargo := us_cargo_bay ; 2 :
32000: LD_ADDR_VAR 0 2
32004: PUSH
32005: LD_INT 12
32007: ST_TO_ADDR
32008: GO 32049
32010: LD_INT 2
32012: DOUBLE
32013: EQUAL
32014: IFTRUE 32018
32016: GO 32029
32018: POP
// n_cargo := ar_cargo_bay ; 3 :
32019: LD_ADDR_VAR 0 2
32023: PUSH
32024: LD_INT 32
32026: ST_TO_ADDR
32027: GO 32049
32029: LD_INT 3
32031: DOUBLE
32032: EQUAL
32033: IFTRUE 32037
32035: GO 32048
32037: POP
// n_cargo := ru_cargo_bay ; end ;
32038: LD_ADDR_VAR 0 2
32042: PUSH
32043: LD_INT 51
32045: ST_TO_ADDR
32046: GO 32049
32048: POP
// cargo := FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_vehicle ] , [ f_weapon , n_cargo ] ] ) ;
32049: LD_ADDR_VAR 0 3
32053: PUSH
32054: LD_INT 22
32056: PUSH
32057: LD_VAR 0 4
32061: PUSH
32062: EMPTY
32063: LIST
32064: LIST
32065: PUSH
32066: LD_INT 21
32068: PUSH
32069: LD_INT 2
32071: PUSH
32072: EMPTY
32073: LIST
32074: LIST
32075: PUSH
32076: LD_INT 34
32078: PUSH
32079: LD_VAR 0 2
32083: PUSH
32084: EMPTY
32085: LIST
32086: LIST
32087: PUSH
32088: EMPTY
32089: LIST
32090: LIST
32091: LIST
32092: PPUSH
32093: CALL_OW 69
32097: ST_TO_ADDR
// if not ( cargo or FilterUnitsInArea ( base_areas [ side ] , [ [ f_side , you ] ] ) ) then
32098: LD_VAR 0 3
32102: PUSH
32103: LD_LOC 70
32107: PUSH
32108: LD_VAR 0 4
32112: ARRAY
32113: PPUSH
32114: LD_INT 22
32116: PUSH
32117: LD_EXP 1
32121: PUSH
32122: EMPTY
32123: LIST
32124: LIST
32125: PUSH
32126: EMPTY
32127: LIST
32128: PPUSH
32129: CALL_OW 70
32133: OR
32134: NOT
32135: IFFALSE 32421
// begin uc_side := side ;
32137: LD_ADDR_OWVAR 20
32141: PUSH
32142: LD_VAR 0 4
32146: ST_TO_ADDR
// case side of 1 :
32147: LD_VAR 0 4
32151: PUSH
32152: LD_INT 1
32154: DOUBLE
32155: EQUAL
32156: IFTRUE 32160
32158: GO 32171
32160: POP
// uc_nation := nation_american ; 2 :
32161: LD_ADDR_OWVAR 21
32165: PUSH
32166: LD_INT 1
32168: ST_TO_ADDR
32169: GO 32210
32171: LD_INT 2
32173: DOUBLE
32174: EQUAL
32175: IFTRUE 32179
32177: GO 32190
32179: POP
// uc_nation := nation_arabian ; 3 :
32180: LD_ADDR_OWVAR 21
32184: PUSH
32185: LD_INT 2
32187: ST_TO_ADDR
32188: GO 32210
32190: LD_INT 3
32192: DOUBLE
32193: EQUAL
32194: IFTRUE 32198
32196: GO 32209
32198: POP
// uc_nation := nation_russian ; end ;
32199: LD_ADDR_OWVAR 21
32203: PUSH
32204: LD_INT 3
32206: ST_TO_ADDR
32207: GO 32210
32209: POP
// uc_direction := Rand ( 0 , 5 ) ;
32210: LD_ADDR_OWVAR 24
32214: PUSH
32215: LD_INT 0
32217: PPUSH
32218: LD_INT 5
32220: PPUSH
32221: CALL_OW 12
32225: ST_TO_ADDR
// case side of 1 :
32226: LD_VAR 0 4
32230: PUSH
32231: LD_INT 1
32233: DOUBLE
32234: EQUAL
32235: IFTRUE 32239
32237: GO 32250
32239: POP
// vc_chassis := us_medium_tracked ; 2 :
32240: LD_ADDR_OWVAR 37
32244: PUSH
32245: LD_INT 3
32247: ST_TO_ADDR
32248: GO 32289
32250: LD_INT 2
32252: DOUBLE
32253: EQUAL
32254: IFTRUE 32258
32256: GO 32269
32258: POP
// vc_chassis := ar_half_tracked ; 3 :
32259: LD_ADDR_OWVAR 37
32263: PUSH
32264: LD_INT 14
32266: ST_TO_ADDR
32267: GO 32289
32269: LD_INT 3
32271: DOUBLE
32272: EQUAL
32273: IFTRUE 32277
32275: GO 32288
32277: POP
// vc_chassis := ru_medium_tracked ; end ;
32278: LD_ADDR_OWVAR 37
32282: PUSH
32283: LD_INT 22
32285: ST_TO_ADDR
32286: GO 32289
32288: POP
// vc_engine := engine_siberite ;
32289: LD_ADDR_OWVAR 39
32293: PUSH
32294: LD_INT 3
32296: ST_TO_ADDR
// case side of 1 :
32297: LD_VAR 0 4
32301: PUSH
32302: LD_INT 1
32304: DOUBLE
32305: EQUAL
32306: IFTRUE 32310
32308: GO 32321
32310: POP
// vc_control := control_computer ; 2 :
32311: LD_ADDR_OWVAR 38
32315: PUSH
32316: LD_INT 3
32318: ST_TO_ADDR
32319: GO 32360
32321: LD_INT 2
32323: DOUBLE
32324: EQUAL
32325: IFTRUE 32329
32327: GO 32340
32329: POP
// vc_control := control_apeman ; 3 :
32330: LD_ADDR_OWVAR 38
32334: PUSH
32335: LD_INT 5
32337: ST_TO_ADDR
32338: GO 32360
32340: LD_INT 3
32342: DOUBLE
32343: EQUAL
32344: IFTRUE 32348
32346: GO 32359
32348: POP
// vc_control := control_computer ; end ;
32349: LD_ADDR_OWVAR 38
32353: PUSH
32354: LD_INT 3
32356: ST_TO_ADDR
32357: GO 32360
32359: POP
// vc_weapon := n_cargo ;
32360: LD_ADDR_OWVAR 40
32364: PUSH
32365: LD_VAR 0 2
32369: ST_TO_ADDR
// un := CreateVehicle ;
32370: LD_ADDR_VAR 0 1
32374: PUSH
32375: CALL_OW 45
32379: ST_TO_ADDR
// while GetTag ( 83 ) do
32380: LD_INT 83
32382: PPUSH
32383: CALL_OW 110
32387: IFFALSE 32398
// wait ( 0 0$1 ) ;
32389: LD_INT 35
32391: PPUSH
32392: CALL_OW 67
32396: GO 32380
// PlaceUnitArea ( un , create_areas [ side ] , false ) ;
32398: LD_VAR 0 1
32402: PPUSH
32403: LD_LOC 71
32407: PUSH
32408: LD_VAR 0 4
32412: ARRAY
32413: PPUSH
32414: LD_INT 0
32416: PPUSH
32417: CALL_OW 49
// end ; end ;
32421: GO 31983
32423: POP
32424: POP
// enable ;
32425: ENABLE
// end ;
32426: PPOPN 4
32428: END
// export function remove_bad_crates ( side ) ; var list , un , x , y ; begin
32429: LD_INT 0
32431: PPUSH
32432: PPUSH
32433: PPUSH
32434: PPUSH
32435: PPUSH
// case side of us :
32436: LD_VAR 0 1
32440: PUSH
32441: LD_EXP 3
32445: DOUBLE
32446: EQUAL
32447: IFTRUE 32451
32449: GO 32522
32451: POP
// begin x := us_bay [ us_bad ] [ 1 ] ;
32452: LD_ADDR_VAR 0 5
32456: PUSH
32457: LD_LOC 72
32461: PUSH
32462: LD_LOC 75
32466: ARRAY
32467: PUSH
32468: LD_INT 1
32470: ARRAY
32471: ST_TO_ADDR
// y := us_bay [ us_bad ] [ 2 ] ;
32472: LD_ADDR_VAR 0 6
32476: PUSH
32477: LD_LOC 72
32481: PUSH
32482: LD_LOC 75
32486: ARRAY
32487: PUSH
32488: LD_INT 2
32490: ARRAY
32491: ST_TO_ADDR
// us_bad := us_bad ^ [ [ x , y ] ] ;
32492: LD_ADDR_LOC 75
32496: PUSH
32497: LD_LOC 75
32501: PUSH
32502: LD_VAR 0 5
32506: PUSH
32507: LD_VAR 0 6
32511: PUSH
32512: EMPTY
32513: LIST
32514: LIST
32515: PUSH
32516: EMPTY
32517: LIST
32518: ADD
32519: ST_TO_ADDR
// end ; ru :
32520: GO 32685
32522: LD_EXP 2
32526: DOUBLE
32527: EQUAL
32528: IFTRUE 32532
32530: GO 32603
32532: POP
// begin x := ru_bay [ us_bad ] [ 1 ] ;
32533: LD_ADDR_VAR 0 5
32537: PUSH
32538: LD_LOC 73
32542: PUSH
32543: LD_LOC 75
32547: ARRAY
32548: PUSH
32549: LD_INT 1
32551: ARRAY
32552: ST_TO_ADDR
// y := ru_bay [ us_bad ] [ 2 ] ;
32553: LD_ADDR_VAR 0 6
32557: PUSH
32558: LD_LOC 73
32562: PUSH
32563: LD_LOC 75
32567: ARRAY
32568: PUSH
32569: LD_INT 2
32571: ARRAY
32572: ST_TO_ADDR
// ru_bad := ru_bad ^ [ [ x , y ] ] ;
32573: LD_ADDR_LOC 76
32577: PUSH
32578: LD_LOC 76
32582: PUSH
32583: LD_VAR 0 5
32587: PUSH
32588: LD_VAR 0 6
32592: PUSH
32593: EMPTY
32594: LIST
32595: LIST
32596: PUSH
32597: EMPTY
32598: LIST
32599: ADD
32600: ST_TO_ADDR
// end ; ar :
32601: GO 32685
32603: LD_EXP 4
32607: DOUBLE
32608: EQUAL
32609: IFTRUE 32613
32611: GO 32684
32613: POP
// begin x := ar_bay [ us_bad ] [ 1 ] ;
32614: LD_ADDR_VAR 0 5
32618: PUSH
32619: LD_LOC 74
32623: PUSH
32624: LD_LOC 75
32628: ARRAY
32629: PUSH
32630: LD_INT 1
32632: ARRAY
32633: ST_TO_ADDR
// y := ar_bay [ us_bad ] [ 2 ] ;
32634: LD_ADDR_VAR 0 6
32638: PUSH
32639: LD_LOC 74
32643: PUSH
32644: LD_LOC 75
32648: ARRAY
32649: PUSH
32650: LD_INT 2
32652: ARRAY
32653: ST_TO_ADDR
// ru_bad := ru_bad ^ [ [ x , y ] ] ;
32654: LD_ADDR_LOC 76
32658: PUSH
32659: LD_LOC 76
32663: PUSH
32664: LD_VAR 0 5
32668: PUSH
32669: LD_VAR 0 6
32673: PUSH
32674: EMPTY
32675: LIST
32676: LIST
32677: PUSH
32678: EMPTY
32679: LIST
32680: ADD
32681: ST_TO_ADDR
// end ; end ;
32682: GO 32685
32684: POP
// list := FilterAllUnits ( [ [ f_side , side ] , [ f_type , unit_human ] , [ f_class , class_engineer ] , [ f_ok ] ] ) ;
32685: LD_ADDR_VAR 0 3
32689: PUSH
32690: LD_INT 22
32692: PUSH
32693: LD_VAR 0 1
32697: PUSH
32698: EMPTY
32699: LIST
32700: LIST
32701: PUSH
32702: LD_INT 21
32704: PUSH
32705: LD_INT 1
32707: PUSH
32708: EMPTY
32709: LIST
32710: LIST
32711: PUSH
32712: LD_INT 25
32714: PUSH
32715: LD_INT 2
32717: PUSH
32718: EMPTY
32719: LIST
32720: LIST
32721: PUSH
32722: LD_INT 50
32724: PUSH
32725: EMPTY
32726: LIST
32727: PUSH
32728: EMPTY
32729: LIST
32730: LIST
32731: LIST
32732: LIST
32733: PPUSH
32734: CALL_OW 69
32738: ST_TO_ADDR
// for un in list do
32739: LD_ADDR_VAR 0 4
32743: PUSH
32744: LD_VAR 0 3
32748: PUSH
32749: FOR_IN
32750: IFFALSE 32803
// if not GetUnitMc ( un ) then
32752: LD_VAR 0 4
32756: PPUSH
32757: CALL_OW 388
32761: NOT
32762: IFFALSE 32801
// begin ComRemember ( un ) ;
32764: LD_VAR 0 4
32768: PPUSH
32769: CALL_OW 143
// AddComCollect ( un , x , y ) ;
32773: LD_VAR 0 4
32777: PPUSH
32778: LD_VAR 0 5
32782: PPUSH
32783: LD_VAR 0 6
32787: PPUSH
32788: CALL_OW 177
// AddComReturn ( un ) ;
32792: LD_VAR 0 4
32796: PPUSH
32797: CALL_OW 204
// end ;
32801: GO 32749
32803: POP
32804: POP
// end ;
32805: LD_VAR 0 2
32809: RET
// every 0 0$7.9 trigger us_bad do var un , list ;
32810: LD_LOC 75
32814: IFFALSE 32911
32816: GO 32818
32818: DISABLE
32819: LD_INT 0
32821: PPUSH
32822: PPUSH
// begin list := [ ] ;
32823: LD_ADDR_VAR 0 2
32827: PUSH
32828: EMPTY
32829: ST_TO_ADDR
// for un in us_bad do
32830: LD_ADDR_VAR 0 1
32834: PUSH
32835: LD_LOC 75
32839: PUSH
32840: FOR_IN
32841: IFFALSE 32898
// begin MoveAreaXY ( crates_check , un [ 1 ] , un [ 2 ] ) ;
32843: LD_INT 35
32845: PPUSH
32846: LD_VAR 0 1
32850: PUSH
32851: LD_INT 1
32853: ARRAY
32854: PPUSH
32855: LD_VAR 0 1
32859: PUSH
32860: LD_INT 2
32862: ARRAY
32863: PPUSH
32864: CALL_OW 425
// if GetListOfCratesInArea ( crates_check ) then
32868: LD_INT 35
32870: PPUSH
32871: CALL_OW 435
32875: IFFALSE 32896
// list := list ^ [ un ] ;
32877: LD_ADDR_VAR 0 2
32881: PUSH
32882: LD_VAR 0 2
32886: PUSH
32887: LD_VAR 0 1
32891: PUSH
32892: EMPTY
32893: LIST
32894: ADD
32895: ST_TO_ADDR
// end ;
32896: GO 32840
32898: POP
32899: POP
// us_bad := list ;
32900: LD_ADDR_LOC 75
32904: PUSH
32905: LD_VAR 0 2
32909: ST_TO_ADDR
// enable ;
32910: ENABLE
// end ;
32911: PPOPN 2
32913: END
// every 0 0$7.8 trigger ru_bad do var un , list ;
32914: LD_LOC 76
32918: IFFALSE 33015
32920: GO 32922
32922: DISABLE
32923: LD_INT 0
32925: PPUSH
32926: PPUSH
// begin list := [ ] ;
32927: LD_ADDR_VAR 0 2
32931: PUSH
32932: EMPTY
32933: ST_TO_ADDR
// for un in ru_bad do
32934: LD_ADDR_VAR 0 1
32938: PUSH
32939: LD_LOC 76
32943: PUSH
32944: FOR_IN
32945: IFFALSE 33002
// begin MoveAreaXY ( crates_check , un [ 1 ] , un [ 2 ] ) ;
32947: LD_INT 35
32949: PPUSH
32950: LD_VAR 0 1
32954: PUSH
32955: LD_INT 1
32957: ARRAY
32958: PPUSH
32959: LD_VAR 0 1
32963: PUSH
32964: LD_INT 2
32966: ARRAY
32967: PPUSH
32968: CALL_OW 425
// if GetListOfCratesInArea ( crates_check ) then
32972: LD_INT 35
32974: PPUSH
32975: CALL_OW 435
32979: IFFALSE 33000
// list := list ^ [ un ] ;
32981: LD_ADDR_VAR 0 2
32985: PUSH
32986: LD_VAR 0 2
32990: PUSH
32991: LD_VAR 0 1
32995: PUSH
32996: EMPTY
32997: LIST
32998: ADD
32999: ST_TO_ADDR
// end ;
33000: GO 32944
33002: POP
33003: POP
// ru_bad := list ;
33004: LD_ADDR_LOC 76
33008: PUSH
33009: LD_VAR 0 2
33013: ST_TO_ADDR
// enable ;
33014: ENABLE
// end ;
33015: PPOPN 2
33017: END
// every 0 0$7.7 trigger ar_bad do var un , list ;
33018: LD_LOC 77
33022: IFFALSE 33119
33024: GO 33026
33026: DISABLE
33027: LD_INT 0
33029: PPUSH
33030: PPUSH
// begin list := [ ] ;
33031: LD_ADDR_VAR 0 2
33035: PUSH
33036: EMPTY
33037: ST_TO_ADDR
// for un in ar_bad do
33038: LD_ADDR_VAR 0 1
33042: PUSH
33043: LD_LOC 77
33047: PUSH
33048: FOR_IN
33049: IFFALSE 33106
// begin MoveAreaXY ( crates_check , un [ 1 ] , un [ 2 ] ) ;
33051: LD_INT 35
33053: PPUSH
33054: LD_VAR 0 1
33058: PUSH
33059: LD_INT 1
33061: ARRAY
33062: PPUSH
33063: LD_VAR 0 1
33067: PUSH
33068: LD_INT 2
33070: ARRAY
33071: PPUSH
33072: CALL_OW 425
// if GetListOfCratesInArea ( crates_check ) then
33076: LD_INT 35
33078: PPUSH
33079: CALL_OW 435
33083: IFFALSE 33104
// list := list ^ [ un ] ;
33085: LD_ADDR_VAR 0 2
33089: PUSH
33090: LD_VAR 0 2
33094: PUSH
33095: LD_VAR 0 1
33099: PUSH
33100: EMPTY
33101: LIST
33102: ADD
33103: ST_TO_ADDR
// end ;
33104: GO 33048
33106: POP
33107: POP
// ar_bad := list ;
33108: LD_ADDR_LOC 77
33112: PUSH
33113: LD_VAR 0 2
33117: ST_TO_ADDR
// enable ;
33118: ENABLE
// end ; end_of_file
33119: PPOPN 2
33121: END
// export function check_remote ( veh ) ; var un , towers , list , all_in , veh_n , veh_l , mech ; begin
33122: LD_INT 0
33124: PPUSH
33125: PPUSH
33126: PPUSH
33127: PPUSH
33128: PPUSH
33129: PPUSH
33130: PPUSH
33131: PPUSH
// list := [ ] ;
33132: LD_ADDR_VAR 0 5
33136: PUSH
33137: EMPTY
33138: ST_TO_ADDR
// veh_l := FilterAllUnits ( [ [ f_side , us ] , [ f_control , control_remote ] , [ f_ok ] ] ) union veh diff 0 ;
33139: LD_ADDR_VAR 0 8
33143: PUSH
33144: LD_INT 22
33146: PUSH
33147: LD_EXP 3
33151: PUSH
33152: EMPTY
33153: LIST
33154: LIST
33155: PUSH
33156: LD_INT 33
33158: PUSH
33159: LD_INT 2
33161: PUSH
33162: EMPTY
33163: LIST
33164: LIST
33165: PUSH
33166: LD_INT 50
33168: PUSH
33169: EMPTY
33170: LIST
33171: PUSH
33172: EMPTY
33173: LIST
33174: LIST
33175: LIST
33176: PPUSH
33177: CALL_OW 69
33181: PUSH
33182: LD_VAR 0 1
33186: UNION
33187: PUSH
33188: LD_INT 0
33190: DIFF
33191: ST_TO_ADDR
// towers := FilterAllUnits ( [ [ f_side , us ] , [ f_btype , b_control_tower ] , [ f_ok ] ] ) ;
33192: LD_ADDR_VAR 0 4
33196: PUSH
33197: LD_INT 22
33199: PUSH
33200: LD_EXP 3
33204: PUSH
33205: EMPTY
33206: LIST
33207: LIST
33208: PUSH
33209: LD_INT 30
33211: PUSH
33212: LD_INT 36
33214: PUSH
33215: EMPTY
33216: LIST
33217: LIST
33218: PUSH
33219: LD_INT 50
33221: PUSH
33222: EMPTY
33223: LIST
33224: PUSH
33225: EMPTY
33226: LIST
33227: LIST
33228: LIST
33229: PPUSH
33230: CALL_OW 69
33234: ST_TO_ADDR
// if not towers then
33235: LD_VAR 0 4
33239: NOT
33240: IFFALSE 33244
// exit ;
33242: GO 33839
// towers := towers [ 1 ] ;
33244: LD_ADDR_VAR 0 4
33248: PUSH
33249: LD_VAR 0 4
33253: PUSH
33254: LD_INT 1
33256: ARRAY
33257: ST_TO_ADDR
// all_in := UnitsInside ( towers ) ;
33258: LD_ADDR_VAR 0 6
33262: PUSH
33263: LD_VAR 0 4
33267: PPUSH
33268: CALL_OW 313
33272: ST_TO_ADDR
// mech := all_in ^ ( FilterAllUnits ( [ [ f_side , us ] , [ f_type , unit_human ] , [ f_class , class_mechanic ] , [ f_ok ] ] ) diff reserved_people [ us ] ) ;
33273: LD_ADDR_VAR 0 9
33277: PUSH
33278: LD_VAR 0 6
33282: PUSH
33283: LD_INT 22
33285: PUSH
33286: LD_EXP 3
33290: PUSH
33291: EMPTY
33292: LIST
33293: LIST
33294: PUSH
33295: LD_INT 21
33297: PUSH
33298: LD_INT 1
33300: PUSH
33301: EMPTY
33302: LIST
33303: LIST
33304: PUSH
33305: LD_INT 25
33307: PUSH
33308: LD_INT 3
33310: PUSH
33311: EMPTY
33312: LIST
33313: LIST
33314: PUSH
33315: LD_INT 50
33317: PUSH
33318: EMPTY
33319: LIST
33320: PUSH
33321: EMPTY
33322: LIST
33323: LIST
33324: LIST
33325: LIST
33326: PPUSH
33327: CALL_OW 69
33331: PUSH
33332: LD_EXP 68
33336: PUSH
33337: LD_EXP 3
33341: ARRAY
33342: DIFF
33343: ADD
33344: ST_TO_ADDR
// for un in mech do
33345: LD_ADDR_VAR 0 3
33349: PUSH
33350: LD_VAR 0 9
33354: PUSH
33355: FOR_IN
33356: IFFALSE 33390
// list := list ^ FindMaxSkill ( mech diff list , skill_mechanical ) ;
33358: LD_ADDR_VAR 0 5
33362: PUSH
33363: LD_VAR 0 5
33367: PUSH
33368: LD_VAR 0 9
33372: PUSH
33373: LD_VAR 0 5
33377: DIFF
33378: PPUSH
33379: LD_INT 3
33381: PPUSH
33382: CALL_OW 433
33386: ADD
33387: ST_TO_ADDR
33388: GO 33355
33390: POP
33391: POP
// mech := [ ] ;
33392: LD_ADDR_VAR 0 9
33396: PUSH
33397: EMPTY
33398: ST_TO_ADDR
// veh_n := 0 + veh_l ;
33399: LD_ADDR_VAR 0 7
33403: PUSH
33404: LD_INT 0
33406: PUSH
33407: LD_VAR 0 8
33411: PLUS
33412: ST_TO_ADDR
// for un in list do
33413: LD_ADDR_VAR 0 3
33417: PUSH
33418: LD_VAR 0 5
33422: PUSH
33423: FOR_IN
33424: IFFALSE 33494
// if ( veh_n > 0 ) or ( ( list diff mech ) > 6 ) then
33426: LD_VAR 0 7
33430: PUSH
33431: LD_INT 0
33433: GREATER
33434: PUSH
33435: LD_VAR 0 5
33439: PUSH
33440: LD_VAR 0 9
33444: DIFF
33445: PUSH
33446: LD_INT 6
33448: GREATER
33449: OR
33450: IFFALSE 33492
// begin mech := mech ^ un ;
33452: LD_ADDR_VAR 0 9
33456: PUSH
33457: LD_VAR 0 9
33461: PUSH
33462: LD_VAR 0 3
33466: ADD
33467: ST_TO_ADDR
// veh_n := veh_n - GetSkill ( un , skill_mechanical ) ;
33468: LD_ADDR_VAR 0 7
33472: PUSH
33473: LD_VAR 0 7
33477: PUSH
33478: LD_VAR 0 3
33482: PPUSH
33483: LD_INT 3
33485: PPUSH
33486: CALL_OW 259
33490: MINUS
33491: ST_TO_ADDR
// end ;
33492: GO 33423
33494: POP
33495: POP
// un := reserved_people [ us ] ^ mech ;
33496: LD_ADDR_VAR 0 3
33500: PUSH
33501: LD_EXP 68
33505: PUSH
33506: LD_EXP 3
33510: ARRAY
33511: PUSH
33512: LD_VAR 0 9
33516: ADD
33517: ST_TO_ADDR
// reserved_people := Delete ( reserved_people , us ) ;
33518: LD_ADDR_EXP 68
33522: PUSH
33523: LD_EXP 68
33527: PPUSH
33528: LD_EXP 3
33532: PPUSH
33533: CALL_OW 3
33537: ST_TO_ADDR
// reserved_people := Insert ( reserved_people , us , un ) ;
33538: LD_ADDR_EXP 68
33542: PUSH
33543: LD_EXP 68
33547: PPUSH
33548: LD_EXP 3
33552: PPUSH
33553: LD_VAR 0 3
33557: PPUSH
33558: CALL_OW 2
33562: ST_TO_ADDR
// list := UnitsInside ( towers ) diff mech ;
33563: LD_ADDR_VAR 0 5
33567: PUSH
33568: LD_VAR 0 4
33572: PPUSH
33573: CALL_OW 313
33577: PUSH
33578: LD_VAR 0 9
33582: DIFF
33583: ST_TO_ADDR
// if list then
33584: LD_VAR 0 5
33588: IFFALSE 33744
// begin un := reserved_people [ us ] diff list ;
33590: LD_ADDR_VAR 0 3
33594: PUSH
33595: LD_EXP 68
33599: PUSH
33600: LD_EXP 3
33604: ARRAY
33605: PUSH
33606: LD_VAR 0 5
33610: DIFF
33611: ST_TO_ADDR
// reserved_people := Delete ( reserved_people , us ) ;
33612: LD_ADDR_EXP 68
33616: PUSH
33617: LD_EXP 68
33621: PPUSH
33622: LD_EXP 3
33626: PPUSH
33627: CALL_OW 3
33631: ST_TO_ADDR
// reserved_people := Insert ( reserved_people , us , un ) ;
33632: LD_ADDR_EXP 68
33636: PUSH
33637: LD_EXP 68
33641: PPUSH
33642: LD_EXP 3
33646: PPUSH
33647: LD_VAR 0 3
33651: PPUSH
33652: CALL_OW 2
33656: ST_TO_ADDR
// ComExitBuilding ( list ) ;
33657: LD_VAR 0 5
33661: PPUSH
33662: CALL_OW 122
// un := FilterAllUnits ( [ [ f_side , us ] , [ f_or , [ f_btype , b_workshop ] , [ f_btype , b_factory ] ] ] ) ;
33666: LD_ADDR_VAR 0 3
33670: PUSH
33671: LD_INT 22
33673: PUSH
33674: LD_EXP 3
33678: PUSH
33679: EMPTY
33680: LIST
33681: LIST
33682: PUSH
33683: LD_INT 2
33685: PUSH
33686: LD_INT 30
33688: PUSH
33689: LD_INT 2
33691: PUSH
33692: EMPTY
33693: LIST
33694: LIST
33695: PUSH
33696: LD_INT 30
33698: PUSH
33699: LD_INT 3
33701: PUSH
33702: EMPTY
33703: LIST
33704: LIST
33705: PUSH
33706: EMPTY
33707: LIST
33708: LIST
33709: LIST
33710: PUSH
33711: EMPTY
33712: LIST
33713: LIST
33714: PPUSH
33715: CALL_OW 69
33719: ST_TO_ADDR
// if un then
33720: LD_VAR 0 3
33724: IFFALSE 33744
// AddComMoveUnit ( list , un [ 1 ] ) ;
33726: LD_VAR 0 5
33730: PPUSH
33731: LD_VAR 0 3
33735: PUSH
33736: LD_INT 1
33738: ARRAY
33739: PPUSH
33740: CALL_OW 172
// end ; repeat ComMoveUnit ( mech , towers ) ;
33744: LD_VAR 0 9
33748: PPUSH
33749: LD_VAR 0 4
33753: PPUSH
33754: CALL_OW 112
// all_in := true ;
33758: LD_ADDR_VAR 0 6
33762: PUSH
33763: LD_INT 1
33765: ST_TO_ADDR
// for un in mech do
33766: LD_ADDR_VAR 0 3
33770: PUSH
33771: LD_VAR 0 9
33775: PUSH
33776: FOR_IN
33777: IFFALSE 33809
// if not ( IsInUnit ( un ) = towers ) then
33779: LD_VAR 0 3
33783: PPUSH
33784: CALL_OW 310
33788: PUSH
33789: LD_VAR 0 4
33793: EQUAL
33794: NOT
33795: IFFALSE 33807
// begin all_in := false ;
33797: LD_ADDR_VAR 0 6
33801: PUSH
33802: LD_INT 0
33804: ST_TO_ADDR
// break ;
33805: GO 33809
// end ;
33807: GO 33776
33809: POP
33810: POP
// wait ( 0 0$1 ) ;
33811: LD_INT 35
33813: PPUSH
33814: CALL_OW 67
// until all_in ;
33818: LD_VAR 0 6
33822: IFFALSE 33744
// ComLinkTo ( veh_l , towers ) ;
33824: LD_VAR 0 8
33828: PPUSH
33829: LD_VAR 0 4
33833: PPUSH
33834: CALL_OW 135
// enable ;
33838: ENABLE
// end ;
33839: LD_VAR 0 2
33843: RET
// every 0 0$10 do var list , tower ;
33844: GO 33846
33846: DISABLE
33847: LD_INT 0
33849: PPUSH
33850: PPUSH
// begin list := FilterAllUnits ( [ [ f_side , us ] , [ f_ok ] , [ f_control , control_remote ] , f_not , [ f_linked ] ] ) ;
33851: LD_ADDR_VAR 0 1
33855: PUSH
33856: LD_INT 22
33858: PUSH
33859: LD_EXP 3
33863: PUSH
33864: EMPTY
33865: LIST
33866: LIST
33867: PUSH
33868: LD_INT 50
33870: PUSH
33871: EMPTY
33872: LIST
33873: PUSH
33874: LD_INT 33
33876: PUSH
33877: LD_INT 2
33879: PUSH
33880: EMPTY
33881: LIST
33882: LIST
33883: PUSH
33884: LD_INT 3
33886: PUSH
33887: LD_INT 61
33889: PUSH
33890: EMPTY
33891: LIST
33892: PUSH
33893: EMPTY
33894: LIST
33895: LIST
33896: LIST
33897: LIST
33898: LIST
33899: PPUSH
33900: CALL_OW 69
33904: ST_TO_ADDR
// if list then
33905: LD_VAR 0 1
33909: IFFALSE 33993
// begin tower := FilterAllUnits ( [ [ f_side , us ] , [ f_btype , b_control_tower ] , [ f_ok ] ] ) ;
33911: LD_ADDR_VAR 0 2
33915: PUSH
33916: LD_INT 22
33918: PUSH
33919: LD_EXP 3
33923: PUSH
33924: EMPTY
33925: LIST
33926: LIST
33927: PUSH
33928: LD_INT 30
33930: PUSH
33931: LD_INT 36
33933: PUSH
33934: EMPTY
33935: LIST
33936: LIST
33937: PUSH
33938: LD_INT 50
33940: PUSH
33941: EMPTY
33942: LIST
33943: PUSH
33944: EMPTY
33945: LIST
33946: LIST
33947: LIST
33948: PPUSH
33949: CALL_OW 69
33953: ST_TO_ADDR
// if tower then
33954: LD_VAR 0 2
33958: IFFALSE 33976
// tower := tower [ 1 ] else
33960: LD_ADDR_VAR 0 2
33964: PUSH
33965: LD_VAR 0 2
33969: PUSH
33970: LD_INT 1
33972: ARRAY
33973: ST_TO_ADDR
33974: GO 33979
// begin enable ;
33976: ENABLE
// exit ;
33977: GO 33994
// end ; ComLinkTo ( list , tower ) ;
33979: LD_VAR 0 1
33983: PPUSH
33984: LD_VAR 0 2
33988: PPUSH
33989: CALL_OW 135
// end ; enable ;
33993: ENABLE
// end ; end_of_file
33994: PPOPN 2
33996: END
// export us_sib_wait , ru_sib_wait ; var time_to_end ; export function init_sib_rocket ; begin
33997: LD_INT 0
33999: PPUSH
// us_sib_wait := false ;
34000: LD_ADDR_EXP 71
34004: PUSH
34005: LD_INT 0
34007: ST_TO_ADDR
// ru_sib_wait := false ;
34008: LD_ADDR_EXP 72
34012: PUSH
34013: LD_INT 0
34015: ST_TO_ADDR
// time_to_end := [ 200 200$0 , 140 140$0 , 90 90$0 ] [ difficulty ] ;
34016: LD_ADDR_LOC 78
34020: PUSH
34021: LD_INT 420000
34023: PUSH
34024: LD_INT 294000
34026: PUSH
34027: LD_INT 189000
34029: PUSH
34030: EMPTY
34031: LIST
34032: LIST
34033: LIST
34034: PUSH
34035: LD_OWVAR 67
34039: ARRAY
34040: ST_TO_ADDR
// end ;
34041: LD_VAR 0 1
34045: RET
// every 0 0$30.5 trigger TICK > time_to_end marked 4 do var factory , zdroje ;
34046: LD_OWVAR 1
34050: PUSH
34051: LD_LOC 78
34055: GREATER
34056: IFFALSE 34289
34058: GO 34060
34060: DISABLE
34061: LD_INT 0
34063: PPUSH
34064: PPUSH
// begin factory := FilterAllUnits ( [ [ f_side , us ] , [ f_btype , b_factory ] ] ) ;
34065: LD_ADDR_VAR 0 1
34069: PUSH
34070: LD_INT 22
34072: PUSH
34073: LD_EXP 3
34077: PUSH
34078: EMPTY
34079: LIST
34080: LIST
34081: PUSH
34082: LD_INT 30
34084: PUSH
34085: LD_INT 3
34087: PUSH
34088: EMPTY
34089: LIST
34090: LIST
34091: PUSH
34092: EMPTY
34093: LIST
34094: LIST
34095: PPUSH
34096: CALL_OW 69
34100: ST_TO_ADDR
// if factory then
34101: LD_VAR 0 1
34105: IFFALSE 34288
// begin factory := factory [ 1 ] ;
34107: LD_ADDR_VAR 0 1
34111: PUSH
34112: LD_VAR 0 1
34116: PUSH
34117: LD_INT 1
34119: ARRAY
34120: ST_TO_ADDR
// if us_siberium_rocket in AvailableWeaponList ( factory ) then
34121: LD_INT 8
34123: PUSH
34124: LD_VAR 0 1
34128: PPUSH
34129: CALL_OW 478
34133: IN
34134: IFFALSE 34288
// begin zdroje := GetResources ( GetBase ( factory ) ) ;
34136: LD_ADDR_VAR 0 2
34140: PUSH
34141: LD_VAR 0 1
34145: PPUSH
34146: CALL_OW 274
34150: PPUSH
34151: CALL_OW 279
34155: ST_TO_ADDR
// if ( zdroje [ 1 ] > 70 ) and ( ( zdroje [ 2 ] > 30 ) or ( zdroje [ 3 ] > 70 ) ) and ( zdroje [ 3 ] > 60 ) then
34156: LD_VAR 0 2
34160: PUSH
34161: LD_INT 1
34163: ARRAY
34164: PUSH
34165: LD_INT 70
34167: GREATER
34168: PUSH
34169: LD_VAR 0 2
34173: PUSH
34174: LD_INT 2
34176: ARRAY
34177: PUSH
34178: LD_INT 30
34180: GREATER
34181: PUSH
34182: LD_VAR 0 2
34186: PUSH
34187: LD_INT 3
34189: ARRAY
34190: PUSH
34191: LD_INT 70
34193: GREATER
34194: OR
34195: AND
34196: PUSH
34197: LD_VAR 0 2
34201: PUSH
34202: LD_INT 3
34204: ARRAY
34205: PUSH
34206: LD_INT 60
34208: GREATER
34209: AND
34210: IFFALSE 34280
// begin if zdroje [ 3 ] > 70 then
34212: LD_VAR 0 2
34216: PUSH
34217: LD_INT 3
34219: ARRAY
34220: PUSH
34221: LD_INT 70
34223: GREATER
34224: IFFALSE 34249
// ComConstruct ( factory , us_morphling , engine_combustion , control_remote , us_siberium_rocket ) else
34226: LD_VAR 0 1
34230: PPUSH
34231: LD_INT 5
34233: PPUSH
34234: LD_INT 1
34236: PPUSH
34237: LD_INT 2
34239: PPUSH
34240: LD_INT 8
34242: PPUSH
34243: CALL_OW 125
34247: GO 34270
// ComConstruct ( factory , us_morphling , engine_siberite , control_remote , us_siberium_rocket ) ;
34249: LD_VAR 0 1
34253: PPUSH
34254: LD_INT 5
34256: PPUSH
34257: LD_INT 3
34259: PPUSH
34260: LD_INT 2
34262: PPUSH
34263: LD_INT 8
34265: PPUSH
34266: CALL_OW 125
// us_sib_wait := false ;
34270: LD_ADDR_EXP 71
34274: PUSH
34275: LD_INT 0
34277: ST_TO_ADDR
// end else
34278: GO 34288
// us_sib_wait := true ;
34280: LD_ADDR_EXP 71
34284: PUSH
34285: LD_INT 1
34287: ST_TO_ADDR
// end ; end ; enable ;
34288: ENABLE
// end ;
34289: PPOPN 2
34291: END
// every 0 0$30.5 trigger TICK > time_to_end marked 5 do var factory , zdroje ;
34292: LD_OWVAR 1
34296: PUSH
34297: LD_LOC 78
34301: GREATER
34302: IFFALSE 34535
34304: GO 34306
34306: DISABLE
34307: LD_INT 0
34309: PPUSH
34310: PPUSH
// begin factory := FilterAllUnits ( [ [ f_side , ru ] , [ f_btype , b_factory ] ] ) ;
34311: LD_ADDR_VAR 0 1
34315: PUSH
34316: LD_INT 22
34318: PUSH
34319: LD_EXP 2
34323: PUSH
34324: EMPTY
34325: LIST
34326: LIST
34327: PUSH
34328: LD_INT 30
34330: PUSH
34331: LD_INT 3
34333: PUSH
34334: EMPTY
34335: LIST
34336: LIST
34337: PUSH
34338: EMPTY
34339: LIST
34340: LIST
34341: PPUSH
34342: CALL_OW 69
34346: ST_TO_ADDR
// if factory then
34347: LD_VAR 0 1
34351: IFFALSE 34534
// begin factory := factory [ 1 ] ;
34353: LD_ADDR_VAR 0 1
34357: PUSH
34358: LD_VAR 0 1
34362: PUSH
34363: LD_INT 1
34365: ARRAY
34366: ST_TO_ADDR
// if ru_siberium_rocket in AvailableWeaponList ( factory ) then
34367: LD_INT 48
34369: PUSH
34370: LD_VAR 0 1
34374: PPUSH
34375: CALL_OW 478
34379: IN
34380: IFFALSE 34534
// begin zdroje := GetResources ( GetBase ( factory ) ) ;
34382: LD_ADDR_VAR 0 2
34386: PUSH
34387: LD_VAR 0 1
34391: PPUSH
34392: CALL_OW 274
34396: PPUSH
34397: CALL_OW 279
34401: ST_TO_ADDR
// if ( zdroje [ 1 ] > 74 ) and ( ( zdroje [ 2 ] > 30 ) or ( zdroje [ 3 ] > 70 ) ) and ( zdroje [ 3 ] > 60 ) then
34402: LD_VAR 0 2
34406: PUSH
34407: LD_INT 1
34409: ARRAY
34410: PUSH
34411: LD_INT 74
34413: GREATER
34414: PUSH
34415: LD_VAR 0 2
34419: PUSH
34420: LD_INT 2
34422: ARRAY
34423: PUSH
34424: LD_INT 30
34426: GREATER
34427: PUSH
34428: LD_VAR 0 2
34432: PUSH
34433: LD_INT 3
34435: ARRAY
34436: PUSH
34437: LD_INT 70
34439: GREATER
34440: OR
34441: AND
34442: PUSH
34443: LD_VAR 0 2
34447: PUSH
34448: LD_INT 3
34450: ARRAY
34451: PUSH
34452: LD_INT 60
34454: GREATER
34455: AND
34456: IFFALSE 34526
// begin if zdroje [ 3 ] > 70 then
34458: LD_VAR 0 2
34462: PUSH
34463: LD_INT 3
34465: ARRAY
34466: PUSH
34467: LD_INT 70
34469: GREATER
34470: IFFALSE 34495
// ComConstruct ( factory , ru_heavy_wheeled , engine_combustion , control_computer , ru_siberium_rocket ) else
34472: LD_VAR 0 1
34476: PPUSH
34477: LD_INT 23
34479: PPUSH
34480: LD_INT 1
34482: PPUSH
34483: LD_INT 3
34485: PPUSH
34486: LD_INT 48
34488: PPUSH
34489: CALL_OW 125
34493: GO 34516
// ComConstruct ( factory , ru_heavy_wheeled , engine_siberite , control_computer , ru_siberium_rocket ) ;
34495: LD_VAR 0 1
34499: PPUSH
34500: LD_INT 23
34502: PPUSH
34503: LD_INT 3
34505: PPUSH
34506: LD_INT 3
34508: PPUSH
34509: LD_INT 48
34511: PPUSH
34512: CALL_OW 125
// ru_sib_wait := false ;
34516: LD_ADDR_EXP 72
34520: PUSH
34521: LD_INT 0
34523: ST_TO_ADDR
// end else
34524: GO 34534
// ru_sib_wait := true ;
34526: LD_ADDR_EXP 72
34530: PUSH
34531: LD_INT 1
34533: ST_TO_ADDR
// end ; end ; enable ;
34534: ENABLE
// end ;
34535: PPOPN 2
34537: END
// export function send_sib_to_US ( veh ) ; var n_check , s_check , send ; begin
34538: LD_INT 0
34540: PPUSH
34541: PPUSH
34542: PPUSH
34543: PPUSH
// repeat n_check := FilterUnitsInArea ( north_check , [ [ f_type , unit_vehicle ] , f_not , [ f_side , ru ] ] ) ;
34544: LD_ADDR_VAR 0 3
34548: PUSH
34549: LD_INT 25
34551: PPUSH
34552: LD_INT 21
34554: PUSH
34555: LD_INT 2
34557: PUSH
34558: EMPTY
34559: LIST
34560: LIST
34561: PUSH
34562: LD_INT 3
34564: PUSH
34565: LD_INT 22
34567: PUSH
34568: LD_EXP 2
34572: PUSH
34573: EMPTY
34574: LIST
34575: LIST
34576: PUSH
34577: EMPTY
34578: LIST
34579: LIST
34580: LIST
34581: PPUSH
34582: CALL_OW 70
34586: ST_TO_ADDR
// s_check := FilterUnitsInArea ( south_check , [ [ f_type , unit_vehicle ] , f_not , [ f_side , ru ] ] ) ;
34587: LD_ADDR_VAR 0 4
34591: PUSH
34592: LD_INT 26
34594: PPUSH
34595: LD_INT 21
34597: PUSH
34598: LD_INT 2
34600: PUSH
34601: EMPTY
34602: LIST
34603: LIST
34604: PUSH
34605: LD_INT 3
34607: PUSH
34608: LD_INT 22
34610: PUSH
34611: LD_EXP 2
34615: PUSH
34616: EMPTY
34617: LIST
34618: LIST
34619: PUSH
34620: EMPTY
34621: LIST
34622: LIST
34623: LIST
34624: PPUSH
34625: CALL_OW 70
34629: ST_TO_ADDR
// wait ( 0 0$2 ) ;
34630: LD_INT 70
34632: PPUSH
34633: CALL_OW 67
// until ( n_check < 3 ) and ( s_check < 3 ) ;
34637: LD_VAR 0 3
34641: PUSH
34642: LD_INT 3
34644: LESS
34645: PUSH
34646: LD_VAR 0 4
34650: PUSH
34651: LD_INT 3
34653: LESS
34654: AND
34655: IFFALSE 34544
// ComMoveXY ( veh , 144 , 65 ) ;
34657: LD_VAR 0 1
34661: PPUSH
34662: LD_INT 144
34664: PPUSH
34665: LD_INT 65
34667: PPUSH
34668: CALL_OW 111
// if n_check < s_check then
34672: LD_VAR 0 3
34676: PUSH
34677: LD_VAR 0 4
34681: LESS
34682: IFFALSE 34731
// begin AddComMoveXY ( veh , 87 , 35 ) ;
34684: LD_VAR 0 1
34688: PPUSH
34689: LD_INT 87
34691: PPUSH
34692: LD_INT 35
34694: PPUSH
34695: CALL_OW 171
// AddComMoveXY ( veh , 42 , 16 ) ;
34699: LD_VAR 0 1
34703: PPUSH
34704: LD_INT 42
34706: PPUSH
34707: LD_INT 16
34709: PPUSH
34710: CALL_OW 171
// AddComAttackPlace ( veh , 41 , 56 ) ;
34714: LD_VAR 0 1
34718: PPUSH
34719: LD_INT 41
34721: PPUSH
34722: LD_INT 56
34724: PPUSH
34725: CALL_OW 176
// end else
34729: GO 34823
// begin AddComMoveXY ( veh , 141 , 116 ) ;
34731: LD_VAR 0 1
34735: PPUSH
34736: LD_INT 141
34738: PPUSH
34739: LD_INT 116
34741: PPUSH
34742: CALL_OW 171
// AddComMoveXY ( veh , 109 , 110 ) ;
34746: LD_VAR 0 1
34750: PPUSH
34751: LD_INT 109
34753: PPUSH
34754: LD_INT 110
34756: PPUSH
34757: CALL_OW 171
// if GetChassis ( veh ) = ru_heavy_tracked then
34761: LD_VAR 0 1
34765: PPUSH
34766: CALL_OW 265
34770: PUSH
34771: LD_INT 24
34773: EQUAL
34774: IFFALSE 34793
// AddComMoveXY ( veh , 86 , 106 ) else
34776: LD_VAR 0 1
34780: PPUSH
34781: LD_INT 86
34783: PPUSH
34784: LD_INT 106
34786: PPUSH
34787: CALL_OW 171
34791: GO 34808
// AddComMoveXY ( veh , 85 , 75 ) ;
34793: LD_VAR 0 1
34797: PPUSH
34798: LD_INT 85
34800: PPUSH
34801: LD_INT 75
34803: PPUSH
34804: CALL_OW 171
// AddComAttackPlace ( veh , 41 , 66 ) ;
34808: LD_VAR 0 1
34812: PPUSH
34813: LD_INT 41
34815: PPUSH
34816: LD_INT 66
34818: PPUSH
34819: CALL_OW 176
// end ; end ; end_of_file
34823: LD_VAR 0 2
34827: RET
// export artefact_number , artefact_num , artefact_size ; export labs_in_use ; export function init_alien_research ; var art_icons , art_events , art_difficulty , art_cost , art_recharge ; begin
34828: LD_INT 0
34830: PPUSH
34831: PPUSH
34832: PPUSH
34833: PPUSH
34834: PPUSH
34835: PPUSH
// artefact_number := 3 ;
34836: LD_ADDR_EXP 73
34840: PUSH
34841: LD_INT 3
34843: ST_TO_ADDR
// artefact_num := [ 0 , 0 , 1 , 2 , 3 ] ;
34844: LD_ADDR_EXP 74
34848: PUSH
34849: LD_INT 0
34851: PUSH
34852: LD_INT 0
34854: PUSH
34855: LD_INT 1
34857: PUSH
34858: LD_INT 2
34860: PUSH
34861: LD_INT 3
34863: PUSH
34864: EMPTY
34865: LIST
34866: LIST
34867: LIST
34868: LIST
34869: LIST
34870: ST_TO_ADDR
// artefact_size := [ 3 , 4 , 5 ] ;
34871: LD_ADDR_EXP 75
34875: PUSH
34876: LD_INT 3
34878: PUSH
34879: LD_INT 4
34881: PUSH
34882: LD_INT 5
34884: PUSH
34885: EMPTY
34886: LIST
34887: LIST
34888: LIST
34889: ST_TO_ADDR
// art_icons := [ [ art_exp_left , art_use_eye ] , [ art_exp_mid , art_use_sibexplosion ] , [ art_exp_right , art_use_power ] ] ;
34890: LD_ADDR_VAR 0 2
34894: PUSH
34895: LD_INT 1
34897: PUSH
34898: LD_INT 4
34900: PUSH
34901: EMPTY
34902: LIST
34903: LIST
34904: PUSH
34905: LD_INT 2
34907: PUSH
34908: LD_INT 5
34910: PUSH
34911: EMPTY
34912: LIST
34913: LIST
34914: PUSH
34915: LD_INT 3
34917: PUSH
34918: LD_INT 9
34920: PUSH
34921: EMPTY
34922: LIST
34923: LIST
34924: PUSH
34925: EMPTY
34926: LIST
34927: LIST
34928: LIST
34929: ST_TO_ADDR
// art_events := [ art_place , art_unit , art_place ] ;
34930: LD_ADDR_VAR 0 3
34934: PUSH
34935: LD_INT 3
34937: PUSH
34938: LD_INT 4
34940: PUSH
34941: LD_INT 3
34943: PUSH
34944: EMPTY
34945: LIST
34946: LIST
34947: LIST
34948: ST_TO_ADDR
// art_difficulty := [ 150 , 250 , 400 ] ;
34949: LD_ADDR_VAR 0 4
34953: PUSH
34954: LD_INT 150
34956: PUSH
34957: LD_INT 250
34959: PUSH
34960: LD_INT 400
34962: PUSH
34963: EMPTY
34964: LIST
34965: LIST
34966: LIST
34967: ST_TO_ADDR
// art_cost := [ 1 + difficulty , 2 + ( 3 * difficulty ) , 30 + ( 10 * difficulty ) ] ;
34968: LD_ADDR_VAR 0 5
34972: PUSH
34973: LD_INT 1
34975: PUSH
34976: LD_OWVAR 67
34980: PLUS
34981: PUSH
34982: LD_INT 2
34984: PUSH
34985: LD_INT 3
34987: PUSH
34988: LD_OWVAR 67
34992: MUL
34993: PLUS
34994: PUSH
34995: LD_INT 30
34997: PUSH
34998: LD_INT 10
35000: PUSH
35001: LD_OWVAR 67
35005: MUL
35006: PLUS
35007: PUSH
35008: EMPTY
35009: LIST
35010: LIST
35011: LIST
35012: ST_TO_ADDR
// art_recharge := [ 6 * difficulty , 12 * difficulty , 10000 ] ;
35013: LD_ADDR_VAR 0 6
35017: PUSH
35018: LD_INT 6
35020: PUSH
35021: LD_OWVAR 67
35025: MUL
35026: PUSH
35027: LD_INT 12
35029: PUSH
35030: LD_OWVAR 67
35034: MUL
35035: PUSH
35036: LD_INT 10000
35038: PUSH
35039: EMPTY
35040: LIST
35041: LIST
35042: LIST
35043: ST_TO_ADDR
// Get_Init_Artefacts ( art_icons , art_events , art_difficulty , art_cost , art_recharge ) ;
35044: LD_VAR 0 2
35048: PPUSH
35049: LD_VAR 0 3
35053: PPUSH
35054: LD_VAR 0 4
35058: PPUSH
35059: LD_VAR 0 5
35063: PPUSH
35064: LD_VAR 0 6
35068: PPUSH
35069: CALL 35078 0 5
// end ;
35073: LD_VAR 0 1
35077: RET
// function Get_Init_Artefacts ( art_icons , art_events , art_difficulty , art_cost , art_recharge ) ; var un , i , side , base ; begin
35078: LD_INT 0
35080: PPUSH
35081: PPUSH
35082: PPUSH
35083: PPUSH
35084: PPUSH
// disable ( 1 ) ;
35085: LD_INT 1
35087: DISABLE_MARKED
// disable ( 5 ) ;
35088: LD_INT 5
35090: DISABLE_MARKED
// disable ( 6 ) ;
35091: LD_INT 6
35093: DISABLE_MARKED
// disable ( 7 ) ;
35094: LD_INT 7
35096: DISABLE_MARKED
// for side = 1 to 8 do
35097: LD_ADDR_VAR 0 9
35101: PUSH
35102: DOUBLE
35103: LD_INT 1
35105: DEC
35106: ST_TO_ADDR
35107: LD_INT 8
35109: PUSH
35110: FOR_TO
35111: IFFALSE 35127
// SetArtifactRes ( side , state_enabled ) ;
35113: LD_VAR 0 9
35117: PPUSH
35118: LD_INT 1
35120: PPUSH
35121: CALL_OW 467
35125: GO 35110
35127: POP
35128: POP
// for un = 0 to ( artefact_number - 1 ) do
35129: LD_ADDR_VAR 0 7
35133: PUSH
35134: DOUBLE
35135: LD_INT 0
35137: DEC
35138: ST_TO_ADDR
35139: LD_EXP 73
35143: PUSH
35144: LD_INT 1
35146: MINUS
35147: PUSH
35148: FOR_TO
35149: IFFALSE 35547
// begin base := un * 100 ;
35151: LD_ADDR_VAR 0 10
35155: PUSH
35156: LD_VAR 0 7
35160: PUSH
35161: LD_INT 100
35163: MUL
35164: ST_TO_ADDR
// SetTag ( base + 01 , art_icons [ un + 1 ] [ 1 ] ) ;
35165: LD_VAR 0 10
35169: PUSH
35170: LD_INT 1
35172: PLUS
35173: PPUSH
35174: LD_VAR 0 1
35178: PUSH
35179: LD_VAR 0 7
35183: PUSH
35184: LD_INT 1
35186: PLUS
35187: ARRAY
35188: PUSH
35189: LD_INT 1
35191: ARRAY
35192: PPUSH
35193: CALL_OW 109
// SetTag ( base + 02 , art_icons [ un + 1 ] [ 2 ] ) ;
35197: LD_VAR 0 10
35201: PUSH
35202: LD_INT 2
35204: PLUS
35205: PPUSH
35206: LD_VAR 0 1
35210: PUSH
35211: LD_VAR 0 7
35215: PUSH
35216: LD_INT 1
35218: PLUS
35219: ARRAY
35220: PUSH
35221: LD_INT 2
35223: ARRAY
35224: PPUSH
35225: CALL_OW 109
// SetTag ( base + 03 , art_events [ un + 1 ] ) ;
35229: LD_VAR 0 10
35233: PUSH
35234: LD_INT 3
35236: PLUS
35237: PPUSH
35238: LD_VAR 0 2
35242: PUSH
35243: LD_VAR 0 7
35247: PUSH
35248: LD_INT 1
35250: PLUS
35251: ARRAY
35252: PPUSH
35253: CALL_OW 109
// SetTag ( base + 05 , art_difficulty [ un + 1 ] ) ;
35257: LD_VAR 0 10
35261: PUSH
35262: LD_INT 5
35264: PLUS
35265: PPUSH
35266: LD_VAR 0 3
35270: PUSH
35271: LD_VAR 0 7
35275: PUSH
35276: LD_INT 1
35278: PLUS
35279: ARRAY
35280: PPUSH
35281: CALL_OW 109
// SetTag ( base + 06 , art_cost [ un + 1 ] ) ;
35285: LD_VAR 0 10
35289: PUSH
35290: LD_INT 6
35292: PLUS
35293: PPUSH
35294: LD_VAR 0 4
35298: PUSH
35299: LD_VAR 0 7
35303: PUSH
35304: LD_INT 1
35306: PLUS
35307: ARRAY
35308: PPUSH
35309: CALL_OW 109
// SetTag ( base + 07 , art_recharge [ un + 1 ] ) ;
35313: LD_VAR 0 10
35317: PUSH
35318: LD_INT 7
35320: PLUS
35321: PPUSH
35322: LD_VAR 0 5
35326: PUSH
35327: LD_VAR 0 7
35331: PUSH
35332: LD_INT 1
35334: PLUS
35335: ARRAY
35336: PPUSH
35337: CALL_OW 109
// SetTag ( base + 08 , false ) ;
35341: LD_VAR 0 10
35345: PUSH
35346: LD_INT 8
35348: PLUS
35349: PPUSH
35350: LD_INT 0
35352: PPUSH
35353: CALL_OW 109
// SetTag ( base + 09 , false ) ;
35357: LD_VAR 0 10
35361: PUSH
35362: LD_INT 9
35364: PLUS
35365: PPUSH
35366: LD_INT 0
35368: PPUSH
35369: CALL_OW 109
// SetTag ( base + 11 , 0 ) ;
35373: LD_VAR 0 10
35377: PUSH
35378: LD_INT 11
35380: PLUS
35381: PPUSH
35382: LD_INT 0
35384: PPUSH
35385: CALL_OW 109
// SetTag ( base + 12 , false ) ;
35389: LD_VAR 0 10
35393: PUSH
35394: LD_INT 12
35396: PLUS
35397: PPUSH
35398: LD_INT 0
35400: PPUSH
35401: CALL_OW 109
// SetTag ( base + 13 , false ) ;
35405: LD_VAR 0 10
35409: PUSH
35410: LD_INT 13
35412: PLUS
35413: PPUSH
35414: LD_INT 0
35416: PPUSH
35417: CALL_OW 109
// for i = 0 to 7 do
35421: LD_ADDR_VAR 0 8
35425: PUSH
35426: DOUBLE
35427: LD_INT 0
35429: DEC
35430: ST_TO_ADDR
35431: LD_INT 7
35433: PUSH
35434: FOR_TO
35435: IFFALSE 35543
// begin SetTag ( base + i * 10 + 21 , false ) ;
35437: LD_VAR 0 10
35441: PUSH
35442: LD_VAR 0 8
35446: PUSH
35447: LD_INT 10
35449: MUL
35450: PLUS
35451: PUSH
35452: LD_INT 21
35454: PLUS
35455: PPUSH
35456: LD_INT 0
35458: PPUSH
35459: CALL_OW 109
// SetTag ( base + i * 10 + 22 , 0 ) ;
35463: LD_VAR 0 10
35467: PUSH
35468: LD_VAR 0 8
35472: PUSH
35473: LD_INT 10
35475: MUL
35476: PLUS
35477: PUSH
35478: LD_INT 22
35480: PLUS
35481: PPUSH
35482: LD_INT 0
35484: PPUSH
35485: CALL_OW 109
// SetTag ( base + i * 10 + 23 , 0 ) ;
35489: LD_VAR 0 10
35493: PUSH
35494: LD_VAR 0 8
35498: PUSH
35499: LD_INT 10
35501: MUL
35502: PLUS
35503: PUSH
35504: LD_INT 23
35506: PLUS
35507: PPUSH
35508: LD_INT 0
35510: PPUSH
35511: CALL_OW 109
// SetTag ( base + i * 10 + 25 , 0 ) ;
35515: LD_VAR 0 10
35519: PUSH
35520: LD_VAR 0 8
35524: PUSH
35525: LD_INT 10
35527: MUL
35528: PLUS
35529: PUSH
35530: LD_INT 25
35532: PLUS
35533: PPUSH
35534: LD_INT 0
35536: PPUSH
35537: CALL_OW 109
// end ;
35541: GO 35434
35543: POP
35544: POP
// end ;
35545: GO 35148
35547: POP
35548: POP
// enable ( 20 ) ;
35549: LD_INT 20
35551: ENABLE_MARKED
// labs_in_use := [ ] ;
35552: LD_ADDR_EXP 76
35556: PUSH
35557: EMPTY
35558: ST_TO_ADDR
// end ;
35559: LD_VAR 0 6
35563: RET
// on ArtifactUnloaded ( un , size ) do var art , base ;
35564: LD_INT 0
35566: PPUSH
35567: PPUSH
// begin art := artefact_num [ size ] ;
35568: LD_ADDR_VAR 0 3
35572: PUSH
35573: LD_EXP 74
35577: PUSH
35578: LD_VAR 0 2
35582: ARRAY
35583: ST_TO_ADDR
// base := ( art - 1 ) * 100 ;
35584: LD_ADDR_VAR 0 4
35588: PUSH
35589: LD_VAR 0 3
35593: PUSH
35594: LD_INT 1
35596: MINUS
35597: PUSH
35598: LD_INT 100
35600: MUL
35601: ST_TO_ADDR
// SetTag ( base + 09 , false ) ;
35602: LD_VAR 0 4
35606: PUSH
35607: LD_INT 9
35609: PLUS
35610: PPUSH
35611: LD_INT 0
35613: PPUSH
35614: CALL_OW 109
// SetTag ( base + 13 , false ) ;
35618: LD_VAR 0 4
35622: PUSH
35623: LD_INT 13
35625: PLUS
35626: PPUSH
35627: LD_INT 0
35629: PPUSH
35630: CALL_OW 109
// Init_Lab ( art ) ;
35634: LD_VAR 0 3
35638: PPUSH
35639: CALL 37175 0 1
// end ;
35643: PPOPN 4
35645: END
// on ArtifactLoaded ( un , size ) do var art , base , side ;
35646: LD_INT 0
35648: PPUSH
35649: PPUSH
35650: PPUSH
// begin art := artefact_num [ size ] ;
35651: LD_ADDR_VAR 0 3
35655: PUSH
35656: LD_EXP 74
35660: PUSH
35661: LD_VAR 0 2
35665: ARRAY
35666: ST_TO_ADDR
// base := ( art - 1 ) * 100 ;
35667: LD_ADDR_VAR 0 4
35671: PUSH
35672: LD_VAR 0 3
35676: PUSH
35677: LD_INT 1
35679: MINUS
35680: PUSH
35681: LD_INT 100
35683: MUL
35684: ST_TO_ADDR
// SetTag ( base + 09 , true ) ;
35685: LD_VAR 0 4
35689: PUSH
35690: LD_INT 9
35692: PLUS
35693: PPUSH
35694: LD_INT 1
35696: PPUSH
35697: CALL_OW 109
// SetTag ( base + 13 , un ) ;
35701: LD_VAR 0 4
35705: PUSH
35706: LD_INT 13
35708: PLUS
35709: PPUSH
35710: LD_VAR 0 1
35714: PPUSH
35715: CALL_OW 109
// if GetTag ( base + 11 ) then
35719: LD_VAR 0 4
35723: PUSH
35724: LD_INT 11
35726: PLUS
35727: PPUSH
35728: CALL_OW 110
35732: IFFALSE 35895
// begin side := GetSide ( GetTag ( base + 11 ) ) ;
35734: LD_ADDR_VAR 0 5
35738: PUSH
35739: LD_VAR 0 4
35743: PUSH
35744: LD_INT 11
35746: PLUS
35747: PPUSH
35748: CALL_OW 110
35752: PPUSH
35753: CALL_OW 255
35757: ST_TO_ADDR
// if GetTag ( base + 12 ) then
35758: LD_VAR 0 4
35762: PUSH
35763: LD_INT 12
35765: PLUS
35766: PPUSH
35767: CALL_OW 110
35771: IFFALSE 35839
// begin ComCancel ( GetTag ( base + 11 ) ) ;
35773: LD_VAR 0 4
35777: PUSH
35778: LD_INT 11
35780: PLUS
35781: PPUSH
35782: CALL_OW 110
35786: PPUSH
35787: CALL_OW 127
// wait ( 5 ) ;
35791: LD_INT 5
35793: PPUSH
35794: CALL_OW 67
// labs_in_use := labs_in_use diff GetTag ( base + 11 ) ;
35798: LD_ADDR_EXP 76
35802: PUSH
35803: LD_EXP 76
35807: PUSH
35808: LD_VAR 0 4
35812: PUSH
35813: LD_INT 11
35815: PLUS
35816: PPUSH
35817: CALL_OW 110
35821: DIFF
35822: ST_TO_ADDR
// SetTag ( base + 12 , false ) ;
35823: LD_VAR 0 4
35827: PUSH
35828: LD_INT 12
35830: PLUS
35831: PPUSH
35832: LD_INT 0
35834: PPUSH
35835: CALL_OW 109
// end ; if not GetTag ( base + side * 10 + 11 ) then
35839: LD_VAR 0 4
35843: PUSH
35844: LD_VAR 0 5
35848: PUSH
35849: LD_INT 10
35851: MUL
35852: PLUS
35853: PUSH
35854: LD_INT 11
35856: PLUS
35857: PPUSH
35858: CALL_OW 110
35862: NOT
35863: IFFALSE 35879
// DeInit_Lab ( side , art ) ;
35865: LD_VAR 0 5
35869: PPUSH
35870: LD_VAR 0 3
35874: PPUSH
35875: CALL 37869 0 2
// SetTag ( base + 11 , 0 ) ;
35879: LD_VAR 0 4
35883: PUSH
35884: LD_INT 11
35886: PLUS
35887: PPUSH
35888: LD_INT 0
35890: PPUSH
35891: CALL_OW 109
// end ; end ;
35895: PPOPN 5
35897: END
// on ArtifactResearchComplete ( lab ) do var un , side ;
35898: LD_INT 0
35900: PPUSH
35901: PPUSH
// begin side := GetSide ( lab ) - 1 ;
35902: LD_ADDR_VAR 0 3
35906: PUSH
35907: LD_VAR 0 1
35911: PPUSH
35912: CALL_OW 255
35916: PUSH
35917: LD_INT 1
35919: MINUS
35920: ST_TO_ADDR
// for un = 0 to ( artefact_number - 1 ) do
35921: LD_ADDR_VAR 0 2
35925: PUSH
35926: DOUBLE
35927: LD_INT 0
35929: DEC
35930: ST_TO_ADDR
35931: LD_EXP 73
35935: PUSH
35936: LD_INT 1
35938: MINUS
35939: PUSH
35940: FOR_TO
35941: IFFALSE 35983
// if lab = GetTag ( un * 100 + 11 ) then
35943: LD_VAR 0 1
35947: PUSH
35948: LD_VAR 0 2
35952: PUSH
35953: LD_INT 100
35955: MUL
35956: PUSH
35957: LD_INT 11
35959: PLUS
35960: PPUSH
35961: CALL_OW 110
35965: EQUAL
35966: IFFALSE 35981
// Init_Lab ( un + 1 ) ;
35968: LD_VAR 0 2
35972: PUSH
35973: LD_INT 1
35975: PLUS
35976: PPUSH
35977: CALL 37175 0 1
35981: GO 35940
35983: POP
35984: POP
// end ;
35985: PPOPN 3
35987: END
// on SpecResearchCancel ( lab , progress ) do var un , side ;
35988: LD_INT 0
35990: PPUSH
35991: PPUSH
// begin side := GetSide ( lab ) - 1 ;
35992: LD_ADDR_VAR 0 4
35996: PUSH
35997: LD_VAR 0 1
36001: PPUSH
36002: CALL_OW 255
36006: PUSH
36007: LD_INT 1
36009: MINUS
36010: ST_TO_ADDR
// for un = 0 to ( artefact_number - 1 ) do
36011: LD_ADDR_VAR 0 3
36015: PUSH
36016: DOUBLE
36017: LD_INT 0
36019: DEC
36020: ST_TO_ADDR
36021: LD_EXP 73
36025: PUSH
36026: LD_INT 1
36028: MINUS
36029: PUSH
36030: FOR_TO
36031: IFFALSE 36149
// if ( GetTag ( un * 100 + 11 ) = lab ) and GetTag ( un * 100 + 12 ) then
36033: LD_VAR 0 3
36037: PUSH
36038: LD_INT 100
36040: MUL
36041: PUSH
36042: LD_INT 11
36044: PLUS
36045: PPUSH
36046: CALL_OW 110
36050: PUSH
36051: LD_VAR 0 1
36055: EQUAL
36056: PUSH
36057: LD_VAR 0 3
36061: PUSH
36062: LD_INT 100
36064: MUL
36065: PUSH
36066: LD_INT 12
36068: PLUS
36069: PPUSH
36070: CALL_OW 110
36074: AND
36075: IFFALSE 36147
// begin SetTag ( un * 100 + side * 10 + 22 , progress ) ;
36077: LD_VAR 0 3
36081: PUSH
36082: LD_INT 100
36084: MUL
36085: PUSH
36086: LD_VAR 0 4
36090: PUSH
36091: LD_INT 10
36093: MUL
36094: PLUS
36095: PUSH
36096: LD_INT 22
36098: PLUS
36099: PPUSH
36100: LD_VAR 0 2
36104: PPUSH
36105: CALL_OW 109
// SetTag ( un * 100 + 12 , false ) ;
36109: LD_VAR 0 3
36113: PUSH
36114: LD_INT 100
36116: MUL
36117: PUSH
36118: LD_INT 12
36120: PLUS
36121: PPUSH
36122: LD_INT 0
36124: PPUSH
36125: CALL_OW 109
// labs_in_use := labs_in_use diff lab ;
36129: LD_ADDR_EXP 76
36133: PUSH
36134: LD_EXP 76
36138: PUSH
36139: LD_VAR 0 1
36143: DIFF
36144: ST_TO_ADDR
// break ;
36145: GO 36149
// end ;
36147: GO 36030
36149: POP
36150: POP
// Update_Artefact ( lab ) ;
36151: LD_VAR 0 1
36155: PPUSH
36156: CALL 38008 0 1
// end ;
36160: PPOPN 4
36162: END
// on SpecResearchComplete ( lab ) do var un , side ;
36163: LD_INT 0
36165: PPUSH
36166: PPUSH
// begin side := GetSide ( lab ) - 1 ;
36167: LD_ADDR_VAR 0 3
36171: PUSH
36172: LD_VAR 0 1
36176: PPUSH
36177: CALL_OW 255
36181: PUSH
36182: LD_INT 1
36184: MINUS
36185: ST_TO_ADDR
// for un = 0 to ( artefact_number - 1 ) do
36186: LD_ADDR_VAR 0 2
36190: PUSH
36191: DOUBLE
36192: LD_INT 0
36194: DEC
36195: ST_TO_ADDR
36196: LD_EXP 73
36200: PUSH
36201: LD_INT 1
36203: MINUS
36204: PUSH
36205: FOR_TO
36206: IFFALSE 36412
// if ( GetTag ( un * 100 + 11 ) = lab ) and GetTag ( un * 100 + 12 ) then
36208: LD_VAR 0 2
36212: PUSH
36213: LD_INT 100
36215: MUL
36216: PUSH
36217: LD_INT 11
36219: PLUS
36220: PPUSH
36221: CALL_OW 110
36225: PUSH
36226: LD_VAR 0 1
36230: EQUAL
36231: PUSH
36232: LD_VAR 0 2
36236: PUSH
36237: LD_INT 100
36239: MUL
36240: PUSH
36241: LD_INT 12
36243: PLUS
36244: PPUSH
36245: CALL_OW 110
36249: AND
36250: IFFALSE 36410
// begin SetTag ( un * 100 + 12 , false ) ;
36252: LD_VAR 0 2
36256: PUSH
36257: LD_INT 100
36259: MUL
36260: PUSH
36261: LD_INT 12
36263: PLUS
36264: PPUSH
36265: LD_INT 0
36267: PPUSH
36268: CALL_OW 109
// SetTag ( un * 100 + side * 10 + 21 , true ) ;
36272: LD_VAR 0 2
36276: PUSH
36277: LD_INT 100
36279: MUL
36280: PUSH
36281: LD_VAR 0 3
36285: PUSH
36286: LD_INT 10
36288: MUL
36289: PLUS
36290: PUSH
36291: LD_INT 21
36293: PLUS
36294: PPUSH
36295: LD_INT 1
36297: PPUSH
36298: CALL_OW 109
// SetTag ( un * 100 + side * 10 + 25 , lab ) ;
36302: LD_VAR 0 2
36306: PUSH
36307: LD_INT 100
36309: MUL
36310: PUSH
36311: LD_VAR 0 3
36315: PUSH
36316: LD_INT 10
36318: MUL
36319: PLUS
36320: PUSH
36321: LD_INT 25
36323: PLUS
36324: PPUSH
36325: LD_VAR 0 1
36329: PPUSH
36330: CALL_OW 109
// labs_in_use := labs_in_use diff lab ;
36334: LD_ADDR_EXP 76
36338: PUSH
36339: LD_EXP 76
36343: PUSH
36344: LD_VAR 0 1
36348: DIFF
36349: ST_TO_ADDR
// case un of 0 :
36350: LD_VAR 0 2
36354: PUSH
36355: LD_INT 0
36357: DOUBLE
36358: EQUAL
36359: IFTRUE 36363
36361: GO 36373
36363: POP
// Hint ( ATSpy ) ; 1 :
36364: LD_STRING ATSpy
36366: PPUSH
36367: CALL_OW 339
36371: GO 36410
36373: LD_INT 1
36375: DOUBLE
36376: EQUAL
36377: IFTRUE 36381
36379: GO 36391
36381: POP
// Hint ( ATDetonated ) ; 2 :
36382: LD_STRING ATDetonated
36384: PPUSH
36385: CALL_OW 339
36389: GO 36410
36391: LD_INT 2
36393: DOUBLE
36394: EQUAL
36395: IFTRUE 36399
36397: GO 36409
36399: POP
// Hint ( ArterfactTeleport ) ; end ;
36400: LD_STRING ArterfactTeleport
36402: PPUSH
36403: CALL_OW 339
36407: GO 36410
36409: POP
// end ;
36410: GO 36205
36412: POP
36413: POP
// Update_Artefact ( lab ) ;
36414: LD_VAR 0 1
36418: PPUSH
36419: CALL 38008 0 1
// end ;
36423: PPOPN 3
36425: END
// on ArtifactUsed ( side , number , p1 , p2 ) do var un , succes , art , base ;
36426: LD_INT 0
36428: PPUSH
36429: PPUSH
36430: PPUSH
36431: PPUSH
// begin art := ( ( number - 1 ) mod 3 ) + 1 ;
36432: LD_ADDR_VAR 0 7
36436: PUSH
36437: LD_VAR 0 2
36441: PUSH
36442: LD_INT 1
36444: MINUS
36445: PUSH
36446: LD_INT 3
36448: MOD
36449: PUSH
36450: LD_INT 1
36452: PLUS
36453: ST_TO_ADDR
// base := ( art - 1 ) * 100 ;
36454: LD_ADDR_VAR 0 8
36458: PUSH
36459: LD_VAR 0 7
36463: PUSH
36464: LD_INT 1
36466: MINUS
36467: PUSH
36468: LD_INT 100
36470: MUL
36471: ST_TO_ADDR
// if number <= 3 then
36472: LD_VAR 0 2
36476: PUSH
36477: LD_INT 3
36479: LESSEQUAL
36480: IFFALSE 36712
// begin SetSpecResearch ( GetTag ( base + 11 ) , GetTag ( base + 05 ) , true ) ;
36482: LD_VAR 0 8
36486: PUSH
36487: LD_INT 11
36489: PLUS
36490: PPUSH
36491: CALL_OW 110
36495: PPUSH
36496: LD_VAR 0 8
36500: PUSH
36501: LD_INT 5
36503: PLUS
36504: PPUSH
36505: CALL_OW 110
36509: PPUSH
36510: LD_INT 1
36512: PPUSH
36513: CALL_OW 486
// SetWorkingProgress ( GetTag ( base + 11 ) , GetTag ( base + side * 10 + 12 ) ) ;
36517: LD_VAR 0 8
36521: PUSH
36522: LD_INT 11
36524: PLUS
36525: PPUSH
36526: CALL_OW 110
36530: PPUSH
36531: LD_VAR 0 8
36535: PUSH
36536: LD_VAR 0 1
36540: PUSH
36541: LD_INT 10
36543: MUL
36544: PLUS
36545: PUSH
36546: LD_INT 12
36548: PLUS
36549: PPUSH
36550: CALL_OW 110
36554: PPUSH
36555: CALL_OW 329
// SetTag ( base + 12 , true ) ;
36559: LD_VAR 0 8
36563: PUSH
36564: LD_INT 12
36566: PLUS
36567: PPUSH
36568: LD_INT 1
36570: PPUSH
36571: CALL_OW 109
// labs_in_use := labs_in_use ^ GetTag ( base + 11 ) ;
36575: LD_ADDR_EXP 76
36579: PUSH
36580: LD_EXP 76
36584: PUSH
36585: LD_VAR 0 8
36589: PUSH
36590: LD_INT 11
36592: PLUS
36593: PPUSH
36594: CALL_OW 110
36598: ADD
36599: ST_TO_ADDR
// for un = 0 to ( artefact_number - 1 ) do
36600: LD_ADDR_VAR 0 5
36604: PUSH
36605: DOUBLE
36606: LD_INT 0
36608: DEC
36609: ST_TO_ADDR
36610: LD_EXP 73
36614: PUSH
36615: LD_INT 1
36617: MINUS
36618: PUSH
36619: FOR_TO
36620: IFFALSE 36708
// if GetTag ( base + 11 ) in [ GetTag ( un * 100 + 11 ) , GetTag ( un * 100 + side * 10 + 15 ) ] then
36622: LD_VAR 0 8
36626: PUSH
36627: LD_INT 11
36629: PLUS
36630: PPUSH
36631: CALL_OW 110
36635: PUSH
36636: LD_VAR 0 5
36640: PUSH
36641: LD_INT 100
36643: MUL
36644: PUSH
36645: LD_INT 11
36647: PLUS
36648: PPUSH
36649: CALL_OW 110
36653: PUSH
36654: LD_VAR 0 5
36658: PUSH
36659: LD_INT 100
36661: MUL
36662: PUSH
36663: LD_VAR 0 1
36667: PUSH
36668: LD_INT 10
36670: MUL
36671: PLUS
36672: PUSH
36673: LD_INT 15
36675: PLUS
36676: PPUSH
36677: CALL_OW 110
36681: PUSH
36682: EMPTY
36683: LIST
36684: LIST
36685: IN
36686: IFFALSE 36706
// DeInit_Lab ( side , un + 1 ) ;
36688: LD_VAR 0 1
36692: PPUSH
36693: LD_VAR 0 5
36697: PUSH
36698: LD_INT 1
36700: PLUS
36701: PPUSH
36702: CALL 37869 0 2
36706: GO 36619
36708: POP
36709: POP
// end else
36710: GO 36886
// begin succes := false ;
36712: LD_ADDR_VAR 0 6
36716: PUSH
36717: LD_INT 0
36719: ST_TO_ADDR
// case art of 1 :
36720: LD_VAR 0 7
36724: PUSH
36725: LD_INT 1
36727: DOUBLE
36728: EQUAL
36729: IFTRUE 36733
36731: GO 36761
36733: POP
// succes := Show_me_map ( side , p1 , p2 ) ; 2 :
36734: LD_ADDR_VAR 0 6
36738: PUSH
36739: LD_VAR 0 1
36743: PPUSH
36744: LD_VAR 0 3
36748: PPUSH
36749: LD_VAR 0 4
36753: PPUSH
36754: CALL 38308 0 3
36758: ST_TO_ADDR
36759: GO 36829
36761: LD_INT 2
36763: DOUBLE
36764: EQUAL
36765: IFTRUE 36769
36767: GO 36792
36769: POP
// succes := Destroy_siberite ( side , p1 ) ; 3 :
36770: LD_ADDR_VAR 0 6
36774: PUSH
36775: LD_VAR 0 1
36779: PPUSH
36780: LD_VAR 0 3
36784: PPUSH
36785: CALL 38546 0 2
36789: ST_TO_ADDR
36790: GO 36829
36792: LD_INT 3
36794: DOUBLE
36795: EQUAL
36796: IFTRUE 36800
36798: GO 36828
36800: POP
// succes := Mass_Teleport ( side , p1 , p2 ) ; end ;
36801: LD_ADDR_VAR 0 6
36805: PUSH
36806: LD_VAR 0 1
36810: PPUSH
36811: LD_VAR 0 3
36815: PPUSH
36816: LD_VAR 0 4
36820: PPUSH
36821: CALL 38871 0 3
36825: ST_TO_ADDR
36826: GO 36829
36828: POP
// if succes then
36829: LD_VAR 0 6
36833: IFFALSE 36886
// begin SetTag ( base + side * 10 + 13 , GetTag ( base + 07 ) ) ;
36835: LD_VAR 0 8
36839: PUSH
36840: LD_VAR 0 1
36844: PUSH
36845: LD_INT 10
36847: MUL
36848: PLUS
36849: PUSH
36850: LD_INT 13
36852: PLUS
36853: PPUSH
36854: LD_VAR 0 8
36858: PUSH
36859: LD_INT 7
36861: PLUS
36862: PPUSH
36863: CALL_OW 110
36867: PPUSH
36868: CALL_OW 109
// Shadow_Artefact ( side , art ) ;
36872: LD_VAR 0 1
36876: PPUSH
36877: LD_VAR 0 7
36881: PPUSH
36882: CALL 36889 0 2
// end ; end ; end ;
36886: PPOPN 8
36888: END
// export function Shadow_Artefact ( side , art ) ; var base , lab ; begin
36889: LD_INT 0
36891: PPUSH
36892: PPUSH
36893: PPUSH
// base := ( art - 1 ) * 100 ;
36894: LD_ADDR_VAR 0 4
36898: PUSH
36899: LD_VAR 0 2
36903: PUSH
36904: LD_INT 1
36906: MINUS
36907: PUSH
36908: LD_INT 100
36910: MUL
36911: ST_TO_ADDR
// lab := GetTag ( base + side * 10 + 15 ) ;
36912: LD_ADDR_VAR 0 5
36916: PUSH
36917: LD_VAR 0 4
36921: PUSH
36922: LD_VAR 0 1
36926: PUSH
36927: LD_INT 10
36929: MUL
36930: PLUS
36931: PUSH
36932: LD_INT 15
36934: PLUS
36935: PPUSH
36936: CALL_OW 110
36940: ST_TO_ADDR
// if lab and ( not lab in labs_in_use ) then
36941: LD_VAR 0 5
36945: PUSH
36946: LD_VAR 0 5
36950: PUSH
36951: LD_EXP 76
36955: IN
36956: NOT
36957: AND
36958: IFFALSE 37016
// SetArtifactUse ( side , GetTag ( base + 01 + GetTag ( base + side * 10 + 11 ) ) , art_gray , lab ) ;
36960: LD_VAR 0 1
36964: PPUSH
36965: LD_VAR 0 4
36969: PUSH
36970: LD_INT 1
36972: PLUS
36973: PUSH
36974: LD_VAR 0 4
36978: PUSH
36979: LD_VAR 0 1
36983: PUSH
36984: LD_INT 10
36986: MUL
36987: PLUS
36988: PUSH
36989: LD_INT 11
36991: PLUS
36992: PPUSH
36993: CALL_OW 110
36997: PLUS
36998: PPUSH
36999: CALL_OW 110
37003: PPUSH
37004: LD_INT 1
37006: PPUSH
37007: LD_VAR 0 5
37011: PPUSH
37012: CALL_OW 468
// end ;
37016: LD_VAR 0 3
37020: RET
// export function Highlight_Artefact ( side , art ) ; var base , lab ; begin
37021: LD_INT 0
37023: PPUSH
37024: PPUSH
37025: PPUSH
// base := ( art - 1 ) * 100 ;
37026: LD_ADDR_VAR 0 4
37030: PUSH
37031: LD_VAR 0 2
37035: PUSH
37036: LD_INT 1
37038: MINUS
37039: PUSH
37040: LD_INT 100
37042: MUL
37043: ST_TO_ADDR
// lab := GetTag ( base + side * 10 + 15 ) ;
37044: LD_ADDR_VAR 0 5
37048: PUSH
37049: LD_VAR 0 4
37053: PUSH
37054: LD_VAR 0 1
37058: PUSH
37059: LD_INT 10
37061: MUL
37062: PLUS
37063: PUSH
37064: LD_INT 15
37066: PLUS
37067: PPUSH
37068: CALL_OW 110
37072: ST_TO_ADDR
// if lab and ( not lab in labs_in_use ) and UnitsInside ( lab ) then
37073: LD_VAR 0 5
37077: PUSH
37078: LD_VAR 0 5
37082: PUSH
37083: LD_EXP 76
37087: IN
37088: NOT
37089: AND
37090: PUSH
37091: LD_VAR 0 5
37095: PPUSH
37096: CALL_OW 313
37100: AND
37101: IFFALSE 37170
// SetArtifactUse ( side , GetTag ( base + 01 + GetTag ( base + side * 10 + 11 ) ) , GetTag ( base + 03 ) , lab ) ;
37103: LD_VAR 0 1
37107: PPUSH
37108: LD_VAR 0 4
37112: PUSH
37113: LD_INT 1
37115: PLUS
37116: PUSH
37117: LD_VAR 0 4
37121: PUSH
37122: LD_VAR 0 1
37126: PUSH
37127: LD_INT 10
37129: MUL
37130: PLUS
37131: PUSH
37132: LD_INT 11
37134: PLUS
37135: PPUSH
37136: CALL_OW 110
37140: PLUS
37141: PPUSH
37142: CALL_OW 110
37146: PPUSH
37147: LD_VAR 0 4
37151: PUSH
37152: LD_INT 3
37154: PLUS
37155: PPUSH
37156: CALL_OW 110
37160: PPUSH
37161: LD_VAR 0 5
37165: PPUSH
37166: CALL_OW 468
// end ;
37170: LD_VAR 0 3
37174: RET
// export function Init_Lab ( art ) ; var list , side , base , dist , state , art_hex , nearest_lab ; begin
37175: LD_INT 0
37177: PPUSH
37178: PPUSH
37179: PPUSH
37180: PPUSH
37181: PPUSH
37182: PPUSH
37183: PPUSH
37184: PPUSH
// art_hex := FindArtifact ( artefact_size [ art ] ) ;
37185: LD_ADDR_VAR 0 8
37189: PUSH
37190: LD_EXP 75
37194: PUSH
37195: LD_VAR 0 1
37199: ARRAY
37200: PPUSH
37201: CALL_OW 469
37205: ST_TO_ADDR
// if not art_hex then
37206: LD_VAR 0 8
37210: NOT
37211: IFFALSE 37215
// exit ;
37213: GO 37864
// case art of 1 :
37215: LD_VAR 0 1
37219: PUSH
37220: LD_INT 1
37222: DOUBLE
37223: EQUAL
37224: IFTRUE 37228
37226: GO 37305
37228: POP
// list := FilterAllUnits ( [ [ f_nation , nation_american ] , [ f_type , unit_building ] , [ f_or , [ f_btype , b_lab ] , [ f_btype , b_lab_half ] , [ f_btype , b_lab_full ] ] ] ) ; 2 :
37229: LD_ADDR_VAR 0 3
37233: PUSH
37234: LD_INT 23
37236: PUSH
37237: LD_INT 1
37239: PUSH
37240: EMPTY
37241: LIST
37242: LIST
37243: PUSH
37244: LD_INT 21
37246: PUSH
37247: LD_INT 3
37249: PUSH
37250: EMPTY
37251: LIST
37252: LIST
37253: PUSH
37254: LD_INT 2
37256: PUSH
37257: LD_INT 30
37259: PUSH
37260: LD_INT 6
37262: PUSH
37263: EMPTY
37264: LIST
37265: LIST
37266: PUSH
37267: LD_INT 30
37269: PUSH
37270: LD_INT 7
37272: PUSH
37273: EMPTY
37274: LIST
37275: LIST
37276: PUSH
37277: LD_INT 30
37279: PUSH
37280: LD_INT 8
37282: PUSH
37283: EMPTY
37284: LIST
37285: LIST
37286: PUSH
37287: EMPTY
37288: LIST
37289: LIST
37290: LIST
37291: LIST
37292: PUSH
37293: EMPTY
37294: LIST
37295: LIST
37296: LIST
37297: PPUSH
37298: CALL_OW 69
37302: ST_TO_ADDR
37303: GO 37425
37305: LD_INT 2
37307: DOUBLE
37308: EQUAL
37309: IFTRUE 37313
37311: GO 37390
37313: POP
// list := FilterAllUnits ( [ [ f_nation , nation_russian ] , [ f_type , unit_building ] , [ f_or , [ f_btype , b_lab ] , [ f_btype , b_lab_half ] , [ f_btype , b_lab_full ] ] ] ) ; 3 :
37314: LD_ADDR_VAR 0 3
37318: PUSH
37319: LD_INT 23
37321: PUSH
37322: LD_INT 3
37324: PUSH
37325: EMPTY
37326: LIST
37327: LIST
37328: PUSH
37329: LD_INT 21
37331: PUSH
37332: LD_INT 3
37334: PUSH
37335: EMPTY
37336: LIST
37337: LIST
37338: PUSH
37339: LD_INT 2
37341: PUSH
37342: LD_INT 30
37344: PUSH
37345: LD_INT 6
37347: PUSH
37348: EMPTY
37349: LIST
37350: LIST
37351: PUSH
37352: LD_INT 30
37354: PUSH
37355: LD_INT 7
37357: PUSH
37358: EMPTY
37359: LIST
37360: LIST
37361: PUSH
37362: LD_INT 30
37364: PUSH
37365: LD_INT 8
37367: PUSH
37368: EMPTY
37369: LIST
37370: LIST
37371: PUSH
37372: EMPTY
37373: LIST
37374: LIST
37375: LIST
37376: LIST
37377: PUSH
37378: EMPTY
37379: LIST
37380: LIST
37381: LIST
37382: PPUSH
37383: CALL_OW 69
37387: ST_TO_ADDR
37388: GO 37425
37390: LD_INT 3
37392: DOUBLE
37393: EQUAL
37394: IFTRUE 37398
37396: GO 37424
37398: POP
// list := FilterAllUnits ( [ [ f_btype , b_alien_tower ] ] ) ; end ;
37399: LD_ADDR_VAR 0 3
37403: PUSH
37404: LD_INT 30
37406: PUSH
37407: LD_INT 39
37409: PUSH
37410: EMPTY
37411: LIST
37412: LIST
37413: PUSH
37414: EMPTY
37415: LIST
37416: PPUSH
37417: CALL_OW 69
37421: ST_TO_ADDR
37422: GO 37425
37424: POP
// nearest_lab := NearestUnitToXY ( list , art_hex [ 1 ] , art_hex [ 2 ] ) ;
37425: LD_ADDR_VAR 0 9
37429: PUSH
37430: LD_VAR 0 3
37434: PPUSH
37435: LD_VAR 0 8
37439: PUSH
37440: LD_INT 1
37442: ARRAY
37443: PPUSH
37444: LD_VAR 0 8
37448: PUSH
37449: LD_INT 2
37451: ARRAY
37452: PPUSH
37453: CALL_OW 73
37457: ST_TO_ADDR
// dist := GetDistUnitXY ( nearest_lab , art_hex [ 1 ] , art_hex [ 2 ] ) ;
37458: LD_ADDR_VAR 0 6
37462: PUSH
37463: LD_VAR 0 9
37467: PPUSH
37468: LD_VAR 0 8
37472: PUSH
37473: LD_INT 1
37475: ARRAY
37476: PPUSH
37477: LD_VAR 0 8
37481: PUSH
37482: LD_INT 2
37484: ARRAY
37485: PPUSH
37486: CALL_OW 297
37490: ST_TO_ADDR
// if dist < 15 then
37491: LD_VAR 0 6
37495: PUSH
37496: LD_INT 15
37498: LESS
37499: IFFALSE 37864
// begin side := GetSide ( nearest_lab ) ;
37501: LD_ADDR_VAR 0 4
37505: PUSH
37506: LD_VAR 0 9
37510: PPUSH
37511: CALL_OW 255
37515: ST_TO_ADDR
// DeInit_Lab ( side , art ) ;
37516: LD_VAR 0 4
37520: PPUSH
37521: LD_VAR 0 1
37525: PPUSH
37526: CALL 37869 0 2
// base := ( art - 1 ) * 100 ;
37530: LD_ADDR_VAR 0 5
37534: PUSH
37535: LD_VAR 0 1
37539: PUSH
37540: LD_INT 1
37542: MINUS
37543: PUSH
37544: LD_INT 100
37546: MUL
37547: ST_TO_ADDR
// if ( GetTech ( tech_Artifact , side ) = state_researched ) then
37548: LD_INT 24
37550: PPUSH
37551: LD_VAR 0 4
37555: PPUSH
37556: CALL_OW 321
37560: PUSH
37561: LD_INT 2
37563: EQUAL
37564: IFFALSE 37767
// begin if GetTag ( base + side * 10 + 11 ) and UnitsInside ( nearest_lab ) then
37566: LD_VAR 0 5
37570: PUSH
37571: LD_VAR 0 4
37575: PUSH
37576: LD_INT 10
37578: MUL
37579: PLUS
37580: PUSH
37581: LD_INT 11
37583: PLUS
37584: PPUSH
37585: CALL_OW 110
37589: PUSH
37590: LD_VAR 0 9
37594: PPUSH
37595: CALL_OW 313
37599: AND
37600: IFFALSE 37757
// begin if not GetTag ( base + side * 10 + 13 ) then
37602: LD_VAR 0 5
37606: PUSH
37607: LD_VAR 0 4
37611: PUSH
37612: LD_INT 10
37614: MUL
37615: PLUS
37616: PUSH
37617: LD_INT 13
37619: PLUS
37620: PPUSH
37621: CALL_OW 110
37625: NOT
37626: IFFALSE 37649
// state := GetTag ( base + 03 ) else
37628: LD_ADDR_VAR 0 7
37632: PUSH
37633: LD_VAR 0 5
37637: PUSH
37638: LD_INT 3
37640: PLUS
37641: PPUSH
37642: CALL_OW 110
37646: ST_TO_ADDR
37647: GO 37657
// state := art_gray ;
37649: LD_ADDR_VAR 0 7
37653: PUSH
37654: LD_INT 1
37656: ST_TO_ADDR
// if GetTag ( base + side * 10 + 15 ) and ( GetTag ( base + side * 10 + 15 ) <> nearest_lab ) then
37657: LD_VAR 0 5
37661: PUSH
37662: LD_VAR 0 4
37666: PUSH
37667: LD_INT 10
37669: MUL
37670: PLUS
37671: PUSH
37672: LD_INT 15
37674: PLUS
37675: PPUSH
37676: CALL_OW 110
37680: PUSH
37681: LD_VAR 0 5
37685: PUSH
37686: LD_VAR 0 4
37690: PUSH
37691: LD_INT 10
37693: MUL
37694: PLUS
37695: PUSH
37696: LD_INT 15
37698: PLUS
37699: PPUSH
37700: CALL_OW 110
37704: PUSH
37705: LD_VAR 0 9
37709: NONEQUAL
37710: AND
37711: IFFALSE 37727
// DeInit_Lab ( side , art ) ;
37713: LD_VAR 0 4
37717: PPUSH
37718: LD_VAR 0 1
37722: PPUSH
37723: CALL 37869 0 2
// SetTag ( base + side * 10 + 15 , nearest_lab ) ;
37727: LD_VAR 0 5
37731: PUSH
37732: LD_VAR 0 4
37736: PUSH
37737: LD_INT 10
37739: MUL
37740: PLUS
37741: PUSH
37742: LD_INT 15
37744: PLUS
37745: PPUSH
37746: LD_VAR 0 9
37750: PPUSH
37751: CALL_OW 109
// end else
37755: GO 37765
// state := art_instant ;
37757: LD_ADDR_VAR 0 7
37761: PUSH
37762: LD_INT 2
37764: ST_TO_ADDR
// end else
37765: GO 37775
// state := art_gray ;
37767: LD_ADDR_VAR 0 7
37771: PUSH
37772: LD_INT 1
37774: ST_TO_ADDR
// SetTag ( base + 11 , nearest_lab ) ;
37775: LD_VAR 0 5
37779: PUSH
37780: LD_INT 11
37782: PLUS
37783: PPUSH
37784: LD_VAR 0 9
37788: PPUSH
37789: CALL_OW 109
// if not ( nearest_lab in labs_in_use ) then
37793: LD_VAR 0 9
37797: PUSH
37798: LD_EXP 76
37802: IN
37803: NOT
37804: IFFALSE 37864
// SetArtifactUse ( side , GetTag ( base + 01 + GetTag ( base + side * 10 + 11 ) ) , state , nearest_lab ) ;
37806: LD_VAR 0 4
37810: PPUSH
37811: LD_VAR 0 5
37815: PUSH
37816: LD_INT 1
37818: PLUS
37819: PUSH
37820: LD_VAR 0 5
37824: PUSH
37825: LD_VAR 0 4
37829: PUSH
37830: LD_INT 10
37832: MUL
37833: PLUS
37834: PUSH
37835: LD_INT 11
37837: PLUS
37838: PPUSH
37839: CALL_OW 110
37843: PLUS
37844: PPUSH
37845: CALL_OW 110
37849: PPUSH
37850: LD_VAR 0 7
37854: PPUSH
37855: LD_VAR 0 9
37859: PPUSH
37860: CALL_OW 468
// end ; end ;
37864: LD_VAR 0 2
37868: RET
// export function DeInit_Lab ( side , art ) ; var base , lab ; begin
37869: LD_INT 0
37871: PPUSH
37872: PPUSH
37873: PPUSH
// base := ( art - 1 ) * 100 ;
37874: LD_ADDR_VAR 0 4
37878: PUSH
37879: LD_VAR 0 2
37883: PUSH
37884: LD_INT 1
37886: MINUS
37887: PUSH
37888: LD_INT 100
37890: MUL
37891: ST_TO_ADDR
// lab := GetTag ( base + side * 10 + 15 ) ;
37892: LD_ADDR_VAR 0 5
37896: PUSH
37897: LD_VAR 0 4
37901: PUSH
37902: LD_VAR 0 1
37906: PUSH
37907: LD_INT 10
37909: MUL
37910: PLUS
37911: PUSH
37912: LD_INT 15
37914: PLUS
37915: PPUSH
37916: CALL_OW 110
37920: ST_TO_ADDR
// if not lab then
37921: LD_VAR 0 5
37925: NOT
37926: IFFALSE 37947
// lab := GetTag ( base + 11 ) ;
37928: LD_ADDR_VAR 0 5
37932: PUSH
37933: LD_VAR 0 4
37937: PUSH
37938: LD_INT 11
37940: PLUS
37941: PPUSH
37942: CALL_OW 110
37946: ST_TO_ADDR
// SetArtifactUse ( side , GetTag ( base + 01 + GetTag ( base + side * 10 + 11 ) ) , art_no , lab ) ;
37947: LD_VAR 0 1
37951: PPUSH
37952: LD_VAR 0 4
37956: PUSH
37957: LD_INT 1
37959: PLUS
37960: PUSH
37961: LD_VAR 0 4
37965: PUSH
37966: LD_VAR 0 1
37970: PUSH
37971: LD_INT 10
37973: MUL
37974: PLUS
37975: PUSH
37976: LD_INT 11
37978: PLUS
37979: PPUSH
37980: CALL_OW 110
37984: PLUS
37985: PPUSH
37986: CALL_OW 110
37990: PPUSH
37991: LD_INT 0
37993: PPUSH
37994: LD_VAR 0 5
37998: PPUSH
37999: CALL_OW 468
// end ;
38003: LD_VAR 0 3
38007: RET
// export function Update_Artefact ( lab ) ; var art , side , base ; begin
38008: LD_INT 0
38010: PPUSH
38011: PPUSH
38012: PPUSH
38013: PPUSH
// side := GetSide ( lab ) ;
38014: LD_ADDR_VAR 0 4
38018: PUSH
38019: LD_VAR 0 1
38023: PPUSH
38024: CALL_OW 255
38028: ST_TO_ADDR
// for art = 1 to artefact_number do
38029: LD_ADDR_VAR 0 3
38033: PUSH
38034: DOUBLE
38035: LD_INT 1
38037: DEC
38038: ST_TO_ADDR
38039: LD_EXP 73
38043: PUSH
38044: FOR_TO
38045: IFFALSE 38201
// begin base := ( art - 1 ) * 100 ;
38047: LD_ADDR_VAR 0 5
38051: PUSH
38052: LD_VAR 0 3
38056: PUSH
38057: LD_INT 1
38059: MINUS
38060: PUSH
38061: LD_INT 100
38063: MUL
38064: ST_TO_ADDR
// if GetTag ( base + 11 ) = lab then
38065: LD_VAR 0 5
38069: PUSH
38070: LD_INT 11
38072: PLUS
38073: PPUSH
38074: CALL_OW 110
38078: PUSH
38079: LD_VAR 0 1
38083: EQUAL
38084: IFFALSE 38097
// Init_Lab ( art ) else
38086: LD_VAR 0 3
38090: PPUSH
38091: CALL 37175 0 1
38095: GO 38199
// begin if lab = GetTag ( base + side * 10 + 15 ) then
38097: LD_VAR 0 1
38101: PUSH
38102: LD_VAR 0 5
38106: PUSH
38107: LD_VAR 0 4
38111: PUSH
38112: LD_INT 10
38114: MUL
38115: PLUS
38116: PUSH
38117: LD_INT 15
38119: PLUS
38120: PPUSH
38121: CALL_OW 110
38125: EQUAL
38126: IFFALSE 38199
// begin if ( GetTag ( base + side * 10 + 13 ) > 0 ) or ( not UnitsInside ( lab ) ) then
38128: LD_VAR 0 5
38132: PUSH
38133: LD_VAR 0 4
38137: PUSH
38138: LD_INT 10
38140: MUL
38141: PLUS
38142: PUSH
38143: LD_INT 13
38145: PLUS
38146: PPUSH
38147: CALL_OW 110
38151: PUSH
38152: LD_INT 0
38154: GREATER
38155: PUSH
38156: LD_VAR 0 1
38160: PPUSH
38161: CALL_OW 313
38165: NOT
38166: OR
38167: IFFALSE 38185
// Shadow_Artefact ( side , art ) else
38169: LD_VAR 0 4
38173: PPUSH
38174: LD_VAR 0 3
38178: PPUSH
38179: CALL 36889 0 2
38183: GO 38199
// Highlight_Artefact ( side , art ) ;
38185: LD_VAR 0 4
38189: PPUSH
38190: LD_VAR 0 3
38194: PPUSH
38195: CALL 37021 0 2
// end ; end ; end ;
38199: GO 38044
38201: POP
38202: POP
// end ;
38203: LD_VAR 0 2
38207: RET
// every 0 0$2 marked 20 do var list , lab ;
38208: GO 38210
38210: DISABLE
38211: LD_INT 0
38213: PPUSH
38214: PPUSH
// begin list := FilterAllUnits ( [ [ f_or , [ f_btype , b_lab ] , [ f_btype , b_lab_half ] , [ f_btype , b_lab_full ] , [ f_btype , b_alien_tower ] ] ] ) ;
38215: LD_ADDR_VAR 0 1
38219: PUSH
38220: LD_INT 2
38222: PUSH
38223: LD_INT 30
38225: PUSH
38226: LD_INT 6
38228: PUSH
38229: EMPTY
38230: LIST
38231: LIST
38232: PUSH
38233: LD_INT 30
38235: PUSH
38236: LD_INT 7
38238: PUSH
38239: EMPTY
38240: LIST
38241: LIST
38242: PUSH
38243: LD_INT 30
38245: PUSH
38246: LD_INT 8
38248: PUSH
38249: EMPTY
38250: LIST
38251: LIST
38252: PUSH
38253: LD_INT 30
38255: PUSH
38256: LD_INT 39
38258: PUSH
38259: EMPTY
38260: LIST
38261: LIST
38262: PUSH
38263: EMPTY
38264: LIST
38265: LIST
38266: LIST
38267: LIST
38268: LIST
38269: PUSH
38270: EMPTY
38271: LIST
38272: PPUSH
38273: CALL_OW 69
38277: ST_TO_ADDR
// for lab in list do
38278: LD_ADDR_VAR 0 2
38282: PUSH
38283: LD_VAR 0 1
38287: PUSH
38288: FOR_IN
38289: IFFALSE 38302
// Update_Artefact ( lab ) ;
38291: LD_VAR 0 2
38295: PPUSH
38296: CALL 38008 0 1
38300: GO 38288
38302: POP
38303: POP
// enable ;
38304: ENABLE
// end ; end_of_file
38305: PPOPN 2
38307: END
// var view_data , human_changed ; export function Show_me_map ( side , x , y ) ; var vysledek , station ; begin
38308: LD_INT 0
38310: PPUSH
38311: PPUSH
38312: PPUSH
// vysledek := true ;
38313: LD_ADDR_VAR 0 5
38317: PUSH
38318: LD_INT 1
38320: ST_TO_ADDR
// station := GetBase ( GetTag ( side * 10 + 15 ) ) ;
38321: LD_ADDR_VAR 0 6
38325: PUSH
38326: LD_VAR 0 1
38330: PUSH
38331: LD_INT 10
38333: MUL
38334: PUSH
38335: LD_INT 15
38337: PLUS
38338: PPUSH
38339: CALL_OW 110
38343: PPUSH
38344: CALL_OW 274
38348: ST_TO_ADDR
// if station and ( GetResources ( station ) [ 3 ] >= GetTag ( 06 ) ) then
38349: LD_VAR 0 6
38353: PUSH
38354: LD_VAR 0 6
38358: PPUSH
38359: CALL_OW 279
38363: PUSH
38364: LD_INT 3
38366: ARRAY
38367: PUSH
38368: LD_INT 6
38370: PPUSH
38371: CALL_OW 110
38375: GREATEREQUAL
38376: AND
38377: IFFALSE 38467
// begin PlaceSeeing ( x , y , side , - 15 ) ;
38379: LD_VAR 0 2
38383: PPUSH
38384: LD_VAR 0 3
38388: PPUSH
38389: LD_VAR 0 1
38393: PPUSH
38394: LD_INT 15
38396: NEG
38397: PPUSH
38398: CALL_OW 330
// SetResourceType ( station , mat_siberit , GetResources ( station ) [ 3 ] - GetTag ( 06 ) ) ;
38402: LD_VAR 0 6
38406: PPUSH
38407: LD_INT 3
38409: PPUSH
38410: LD_VAR 0 6
38414: PPUSH
38415: CALL_OW 279
38419: PUSH
38420: LD_INT 3
38422: ARRAY
38423: PUSH
38424: LD_INT 6
38426: PPUSH
38427: CALL_OW 110
38431: MINUS
38432: PPUSH
38433: CALL_OW 277
// view_data := [ x , y , side ] ;
38437: LD_ADDR_LOC 79
38441: PUSH
38442: LD_VAR 0 2
38446: PUSH
38447: LD_VAR 0 3
38451: PUSH
38452: LD_VAR 0 1
38456: PUSH
38457: EMPTY
38458: LIST
38459: LIST
38460: LIST
38461: ST_TO_ADDR
// enable ( 111 ) ;
38462: LD_INT 111
38464: ENABLE_MARKED
// end else
38465: GO 38475
// vysledek := false ;
38467: LD_ADDR_VAR 0 5
38471: PUSH
38472: LD_INT 0
38474: ST_TO_ADDR
// result := vysledek ;
38475: LD_ADDR_VAR 0 4
38479: PUSH
38480: LD_VAR 0 5
38484: ST_TO_ADDR
// end ;
38485: LD_VAR 0 4
38489: RET
// every 0 0$2.8 trigger view_data marked 111 do
38490: LD_LOC 79
38494: IFFALSE 38545
38496: GO 38498
38498: DISABLE
// begin wait ( 0 0$30 ) ;
38499: LD_INT 1050
38501: PPUSH
38502: CALL_OW 67
// RemoveSeeing ( view_data [ 1 ] , view_data [ 2 ] , view_data [ 3 ] ) ;
38506: LD_LOC 79
38510: PUSH
38511: LD_INT 1
38513: ARRAY
38514: PPUSH
38515: LD_LOC 79
38519: PUSH
38520: LD_INT 2
38522: ARRAY
38523: PPUSH
38524: LD_LOC 79
38528: PUSH
38529: LD_INT 3
38531: ARRAY
38532: PPUSH
38533: CALL_OW 331
// view_data := 0 ;
38537: LD_ADDR_LOC 79
38541: PUSH
38542: LD_INT 0
38544: ST_TO_ADDR
// end ;
38545: END
// export function Destroy_siberite ( side , un ) ; var vysledek , station , v_can , b_can , it_can , building_list , vehicle_list ; begin
38546: LD_INT 0
38548: PPUSH
38549: PPUSH
38550: PPUSH
38551: PPUSH
38552: PPUSH
38553: PPUSH
38554: PPUSH
38555: PPUSH
// vysledek := true ;
38556: LD_ADDR_VAR 0 4
38560: PUSH
38561: LD_INT 1
38563: ST_TO_ADDR
// it_can := false ;
38564: LD_ADDR_VAR 0 8
38568: PUSH
38569: LD_INT 0
38571: ST_TO_ADDR
// building_list := [ b_siberite_mine , b_siberite_power ] ;
38572: LD_ADDR_VAR 0 9
38576: PUSH
38577: LD_INT 30
38579: PUSH
38580: LD_INT 28
38582: PUSH
38583: EMPTY
38584: LIST
38585: LIST
38586: ST_TO_ADDR
// vehicle_list := [ us_siberium_rocket , ru_siberium_rocket , ar_selfpropelled_bomb , ru_time_lapser , us_double_laser ] ;
38587: LD_ADDR_VAR 0 10
38591: PUSH
38592: LD_INT 8
38594: PUSH
38595: LD_INT 48
38597: PUSH
38598: LD_INT 29
38600: PUSH
38601: LD_INT 49
38603: PUSH
38604: LD_INT 10
38606: PUSH
38607: EMPTY
38608: LIST
38609: LIST
38610: LIST
38611: LIST
38612: LIST
38613: ST_TO_ADDR
// b_can := ( GetType ( un ) = unit_building ) and ( ( GetBType ( un ) in building_list ) or ( GetBWeapon ( un ) in vehicle_list ) ) ;
38614: LD_ADDR_VAR 0 7
38618: PUSH
38619: LD_VAR 0 2
38623: PPUSH
38624: CALL_OW 247
38628: PUSH
38629: LD_INT 3
38631: EQUAL
38632: PUSH
38633: LD_VAR 0 2
38637: PPUSH
38638: CALL_OW 266
38642: PUSH
38643: LD_VAR 0 9
38647: IN
38648: PUSH
38649: LD_VAR 0 2
38653: PPUSH
38654: CALL_OW 269
38658: PUSH
38659: LD_VAR 0 10
38663: IN
38664: OR
38665: AND
38666: ST_TO_ADDR
// v_can := ( GetType ( un ) = unit_vehicle ) and ( ( GetWeapon ( un ) in vehicle_list ) or ( GetEngine ( un ) = engine_siberite ) ) ;
38667: LD_ADDR_VAR 0 6
38671: PUSH
38672: LD_VAR 0 2
38676: PPUSH
38677: CALL_OW 247
38681: PUSH
38682: LD_INT 2
38684: EQUAL
38685: PUSH
38686: LD_VAR 0 2
38690: PPUSH
38691: CALL_OW 264
38695: PUSH
38696: LD_VAR 0 10
38700: IN
38701: PUSH
38702: LD_VAR 0 2
38706: PPUSH
38707: CALL_OW 262
38711: PUSH
38712: LD_INT 3
38714: EQUAL
38715: OR
38716: AND
38717: ST_TO_ADDR
// it_can := b_can or v_can ;
38718: LD_ADDR_VAR 0 8
38722: PUSH
38723: LD_VAR 0 7
38727: PUSH
38728: LD_VAR 0 6
38732: OR
38733: ST_TO_ADDR
// station := GetBase ( GetTag ( 100 + side * 10 + 15 ) ) ;
38734: LD_ADDR_VAR 0 5
38738: PUSH
38739: LD_INT 100
38741: PUSH
38742: LD_VAR 0 1
38746: PUSH
38747: LD_INT 10
38749: MUL
38750: PLUS
38751: PUSH
38752: LD_INT 15
38754: PLUS
38755: PPUSH
38756: CALL_OW 110
38760: PPUSH
38761: CALL_OW 274
38765: ST_TO_ADDR
// if station and it_can and ( GetResources ( station ) [ 3 ] >= GetTag ( 106 ) ) then
38766: LD_VAR 0 5
38770: PUSH
38771: LD_VAR 0 8
38775: AND
38776: PUSH
38777: LD_VAR 0 5
38781: PPUSH
38782: CALL_OW 279
38786: PUSH
38787: LD_INT 3
38789: ARRAY
38790: PUSH
38791: LD_INT 106
38793: PPUSH
38794: CALL_OW 110
38798: GREATEREQUAL
38799: AND
38800: IFFALSE 38848
// begin KillUnit ( un ) ;
38802: LD_VAR 0 2
38806: PPUSH
38807: CALL_OW 66
// SetResourceType ( station , mat_siberit , GetResources ( station ) [ 3 ] - GetTag ( 106 ) ) ;
38811: LD_VAR 0 5
38815: PPUSH
38816: LD_INT 3
38818: PPUSH
38819: LD_VAR 0 5
38823: PPUSH
38824: CALL_OW 279
38828: PUSH
38829: LD_INT 3
38831: ARRAY
38832: PUSH
38833: LD_INT 106
38835: PPUSH
38836: CALL_OW 110
38840: MINUS
38841: PPUSH
38842: CALL_OW 277
// end else
38846: GO 38856
// vysledek := false ;
38848: LD_ADDR_VAR 0 4
38852: PUSH
38853: LD_INT 0
38855: ST_TO_ADDR
// result := vysledek ;
38856: LD_ADDR_VAR 0 3
38860: PUSH
38861: LD_VAR 0 4
38865: ST_TO_ADDR
// end ;
38866: LD_VAR 0 3
38870: RET
// export function Mass_Teleport ( side , x , y ) ; var vysledek , station , list , un ; begin
38871: LD_INT 0
38873: PPUSH
38874: PPUSH
38875: PPUSH
38876: PPUSH
38877: PPUSH
// vysledek := true ;
38878: LD_ADDR_VAR 0 5
38882: PUSH
38883: LD_INT 1
38885: ST_TO_ADDR
// station := GetBase ( GetTag ( 200 + side * 10 + 15 ) ) ;
38886: LD_ADDR_VAR 0 6
38890: PUSH
38891: LD_INT 200
38893: PUSH
38894: LD_VAR 0 1
38898: PUSH
38899: LD_INT 10
38901: MUL
38902: PLUS
38903: PUSH
38904: LD_INT 15
38906: PLUS
38907: PPUSH
38908: CALL_OW 110
38912: PPUSH
38913: CALL_OW 274
38917: ST_TO_ADDR
// if station and ( GetResources ( station ) [ 3 ] >= GetTag ( 206 ) ) then
38918: LD_VAR 0 6
38922: PUSH
38923: LD_VAR 0 6
38927: PPUSH
38928: CALL_OW 279
38932: PUSH
38933: LD_INT 3
38935: ARRAY
38936: PUSH
38937: LD_INT 206
38939: PPUSH
38940: CALL_OW 110
38944: GREATEREQUAL
38945: AND
38946: IFFALSE 39129
// begin SetResourceType ( station , mat_siberit , GetResources ( station ) [ 3 ] - GetTag ( 206 ) ) ;
38948: LD_VAR 0 6
38952: PPUSH
38953: LD_INT 3
38955: PPUSH
38956: LD_VAR 0 6
38960: PPUSH
38961: CALL_OW 279
38965: PUSH
38966: LD_INT 3
38968: ARRAY
38969: PUSH
38970: LD_INT 206
38972: PPUSH
38973: CALL_OW 110
38977: MINUS
38978: PPUSH
38979: CALL_OW 277
// SetAreaMapShow ( teleport_area , 1 ) ;
38983: LD_INT 24
38985: PPUSH
38986: LD_INT 1
38988: PPUSH
38989: CALL_OW 424
// for un = 1 to 11 do
38993: LD_ADDR_VAR 0 8
38997: PUSH
38998: DOUBLE
38999: LD_INT 1
39001: DEC
39002: ST_TO_ADDR
39003: LD_INT 11
39005: PUSH
39006: FOR_TO
39007: IFFALSE 39035
// begin display_strings := [ ( 11 - un ) ] ;
39009: LD_ADDR_OWVAR 47
39013: PUSH
39014: LD_INT 11
39016: PUSH
39017: LD_VAR 0 8
39021: MINUS
39022: PUSH
39023: EMPTY
39024: LIST
39025: ST_TO_ADDR
// wait ( 0 0$1 ) ;
39026: LD_INT 35
39028: PPUSH
39029: CALL_OW 67
// end ;
39033: GO 39006
39035: POP
39036: POP
// display_strings :=  ;
39037: LD_ADDR_OWVAR 47
39041: PUSH
39042: LD_STRING 
39044: ST_TO_ADDR
// SetAreaMapShow ( teleport_area , 0 ) ;
39045: LD_INT 24
39047: PPUSH
39048: LD_INT 0
39050: PPUSH
39051: CALL_OW 424
// list := FilterUnitsInArea ( teleport_area , [ f_not , [ f_type , unit_building ] ] ) ;
39055: LD_ADDR_VAR 0 7
39059: PUSH
39060: LD_INT 24
39062: PPUSH
39063: LD_INT 3
39065: PUSH
39066: LD_INT 21
39068: PUSH
39069: LD_INT 3
39071: PUSH
39072: EMPTY
39073: LIST
39074: LIST
39075: PUSH
39076: EMPTY
39077: LIST
39078: LIST
39079: PPUSH
39080: CALL_OW 70
39084: ST_TO_ADDR
// for un in list do
39085: LD_ADDR_VAR 0 8
39089: PUSH
39090: LD_VAR 0 7
39094: PUSH
39095: FOR_IN
39096: IFFALSE 39125
// TeleportUnit ( un , x , y , 12 , true ) ;
39098: LD_VAR 0 8
39102: PPUSH
39103: LD_VAR 0 2
39107: PPUSH
39108: LD_VAR 0 3
39112: PPUSH
39113: LD_INT 12
39115: PPUSH
39116: LD_INT 1
39118: PPUSH
39119: CALL_OW 483
39123: GO 39095
39125: POP
39126: POP
// end else
39127: GO 39137
// vysledek := false ;
39129: LD_ADDR_VAR 0 5
39133: PUSH
39134: LD_INT 0
39136: ST_TO_ADDR
// result := vysledek ;
39137: LD_ADDR_VAR 0 4
39141: PUSH
39142: LD_VAR 0 5
39146: ST_TO_ADDR
// end ;
39147: LD_VAR 0 4
39151: RET
// every 0 0$5 marked 20 do var art , side , recharge ;
39152: GO 39154
39154: DISABLE
39155: LD_INT 0
39157: PPUSH
39158: PPUSH
39159: PPUSH
// begin side := you ;
39160: LD_ADDR_VAR 0 2
39164: PUSH
39165: LD_EXP 1
39169: ST_TO_ADDR
// for art = 0 to artefact_number do
39170: LD_ADDR_VAR 0 1
39174: PUSH
39175: DOUBLE
39176: LD_INT 0
39178: DEC
39179: ST_TO_ADDR
39180: LD_EXP 73
39184: PUSH
39185: FOR_TO
39186: IFFALSE 39286
// begin recharge := art * 100 + side * 10 + 13 ;
39188: LD_ADDR_VAR 0 3
39192: PUSH
39193: LD_VAR 0 1
39197: PUSH
39198: LD_INT 100
39200: MUL
39201: PUSH
39202: LD_VAR 0 2
39206: PUSH
39207: LD_INT 10
39209: MUL
39210: PLUS
39211: PUSH
39212: LD_INT 13
39214: PLUS
39215: ST_TO_ADDR
// if GetTag ( recharge ) > 0 then
39216: LD_VAR 0 3
39220: PPUSH
39221: CALL_OW 110
39225: PUSH
39226: LD_INT 0
39228: GREATER
39229: IFFALSE 39284
// begin SetTag ( recharge , GetTag ( recharge ) - 1 ) ;
39231: LD_VAR 0 3
39235: PPUSH
39236: LD_VAR 0 3
39240: PPUSH
39241: CALL_OW 110
39245: PUSH
39246: LD_INT 1
39248: MINUS
39249: PPUSH
39250: CALL_OW 109
// if not GetTag ( recharge ) then
39254: LD_VAR 0 3
39258: PPUSH
39259: CALL_OW 110
39263: NOT
39264: IFFALSE 39284
// Highlight_Artefact ( side , art + 1 ) ;
39266: LD_VAR 0 2
39270: PPUSH
39271: LD_VAR 0 1
39275: PUSH
39276: LD_INT 1
39278: PLUS
39279: PPUSH
39280: CALL 37021 0 2
// end ; end ;
39284: GO 39185
39286: POP
39287: POP
// enable ;
39288: ENABLE
// end ; end_of_file
39289: PPOPN 3
39291: END
// var us_fort , ru_fort ; var us_place , ru_place ; every 0 0$11 do var side , un , list ;
39292: GO 39294
39294: DISABLE
39295: LD_INT 0
39297: PPUSH
39298: PPUSH
39299: PPUSH
// begin us_fort := [ ] ;
39300: LD_ADDR_LOC 81
39304: PUSH
39305: EMPTY
39306: ST_TO_ADDR
// ru_fort := [ ] ;
39307: LD_ADDR_LOC 82
39311: PUSH
39312: EMPTY
39313: ST_TO_ADDR
// for side in ( cpu_list diff ar ) do
39314: LD_ADDR_VAR 0 1
39318: PUSH
39319: LD_EXP 8
39323: PUSH
39324: LD_EXP 4
39328: DIFF
39329: PUSH
39330: FOR_IN
39331: IFFALSE 39536
// begin list := FilterAllUnits ( [ [ f_side , side ] , [ f_or , [ f_btype , b_bunker ] , [ f_btype , b_turret ] ] ] ) ;
39333: LD_ADDR_VAR 0 3
39337: PUSH
39338: LD_INT 22
39340: PUSH
39341: LD_VAR 0 1
39345: PUSH
39346: EMPTY
39347: LIST
39348: LIST
39349: PUSH
39350: LD_INT 2
39352: PUSH
39353: LD_INT 30
39355: PUSH
39356: LD_INT 32
39358: PUSH
39359: EMPTY
39360: LIST
39361: LIST
39362: PUSH
39363: LD_INT 30
39365: PUSH
39366: LD_INT 33
39368: PUSH
39369: EMPTY
39370: LIST
39371: LIST
39372: PUSH
39373: EMPTY
39374: LIST
39375: LIST
39376: LIST
39377: PUSH
39378: EMPTY
39379: LIST
39380: LIST
39381: PPUSH
39382: CALL_OW 69
39386: ST_TO_ADDR
// for un in list do
39387: LD_ADDR_VAR 0 2
39391: PUSH
39392: LD_VAR 0 3
39396: PUSH
39397: FOR_IN
39398: IFFALSE 39532
// case side of us :
39400: LD_VAR 0 1
39404: PUSH
39405: LD_EXP 3
39409: DOUBLE
39410: EQUAL
39411: IFTRUE 39415
39413: GO 39467
39415: POP
// us_fort := us_fort ^ [ [ GetX ( un ) , GetY ( un ) , GetBWeapon ( un ) ] ] ; ru :
39416: LD_ADDR_LOC 81
39420: PUSH
39421: LD_LOC 81
39425: PUSH
39426: LD_VAR 0 2
39430: PPUSH
39431: CALL_OW 250
39435: PUSH
39436: LD_VAR 0 2
39440: PPUSH
39441: CALL_OW 251
39445: PUSH
39446: LD_VAR 0 2
39450: PPUSH
39451: CALL_OW 269
39455: PUSH
39456: EMPTY
39457: LIST
39458: LIST
39459: LIST
39460: PUSH
39461: EMPTY
39462: LIST
39463: ADD
39464: ST_TO_ADDR
39465: GO 39530
39467: LD_EXP 2
39471: DOUBLE
39472: EQUAL
39473: IFTRUE 39477
39475: GO 39529
39477: POP
// ru_fort := ru_fort ^ [ [ GetX ( un ) , GetY ( un ) , GetBWeapon ( un ) ] ] ; end ;
39478: LD_ADDR_LOC 82
39482: PUSH
39483: LD_LOC 82
39487: PUSH
39488: LD_VAR 0 2
39492: PPUSH
39493: CALL_OW 250
39497: PUSH
39498: LD_VAR 0 2
39502: PPUSH
39503: CALL_OW 251
39507: PUSH
39508: LD_VAR 0 2
39512: PPUSH
39513: CALL_OW 269
39517: PUSH
39518: EMPTY
39519: LIST
39520: LIST
39521: LIST
39522: PUSH
39523: EMPTY
39524: LIST
39525: ADD
39526: ST_TO_ADDR
39527: GO 39530
39529: POP
39530: GO 39397
39532: POP
39533: POP
// end ;
39534: GO 39330
39536: POP
39537: POP
// end ;
39538: PPOPN 3
39540: END
// every 0 0$10.5 do var un , w , x , y , list ;
39541: GO 39543
39543: DISABLE
39544: LD_INT 0
39546: PPUSH
39547: PPUSH
39548: PPUSH
39549: PPUSH
39550: PPUSH
// begin list := FilterAllUnits ( [ [ f_side , us ] , [ f_or , [ f_btype , b_bunker ] , [ f_btype , b_turret ] ] , [ f_constructed ] , f_not , [ f_or , [ f_bweapon , us_rocket_launcher ] , [ f_bweapon , us_heavy_gun ] , [ f_bweapon , us_radar ] , [ f_bweapon , us_double_laser ] ] ] ) ;
39551: LD_ADDR_VAR 0 5
39555: PUSH
39556: LD_INT 22
39558: PUSH
39559: LD_EXP 3
39563: PUSH
39564: EMPTY
39565: LIST
39566: LIST
39567: PUSH
39568: LD_INT 2
39570: PUSH
39571: LD_INT 30
39573: PUSH
39574: LD_INT 32
39576: PUSH
39577: EMPTY
39578: LIST
39579: LIST
39580: PUSH
39581: LD_INT 30
39583: PUSH
39584: LD_INT 33
39586: PUSH
39587: EMPTY
39588: LIST
39589: LIST
39590: PUSH
39591: EMPTY
39592: LIST
39593: LIST
39594: LIST
39595: PUSH
39596: LD_INT 57
39598: PUSH
39599: EMPTY
39600: LIST
39601: PUSH
39602: LD_INT 3
39604: PUSH
39605: LD_INT 2
39607: PUSH
39608: LD_INT 35
39610: PUSH
39611: LD_INT 7
39613: PUSH
39614: EMPTY
39615: LIST
39616: LIST
39617: PUSH
39618: LD_INT 35
39620: PUSH
39621: LD_INT 6
39623: PUSH
39624: EMPTY
39625: LIST
39626: LIST
39627: PUSH
39628: LD_INT 35
39630: PUSH
39631: LD_INT 11
39633: PUSH
39634: EMPTY
39635: LIST
39636: LIST
39637: PUSH
39638: LD_INT 35
39640: PUSH
39641: LD_INT 10
39643: PUSH
39644: EMPTY
39645: LIST
39646: LIST
39647: PUSH
39648: EMPTY
39649: LIST
39650: LIST
39651: LIST
39652: LIST
39653: LIST
39654: PUSH
39655: EMPTY
39656: LIST
39657: LIST
39658: LIST
39659: LIST
39660: LIST
39661: PPUSH
39662: CALL_OW 69
39666: ST_TO_ADDR
// for un in list do
39667: LD_ADDR_VAR 0 1
39671: PUSH
39672: LD_VAR 0 5
39676: PUSH
39677: FOR_IN
39678: IFFALSE 39793
// begin x := GetX ( un ) ;
39680: LD_ADDR_VAR 0 3
39684: PUSH
39685: LD_VAR 0 1
39689: PPUSH
39690: CALL_OW 250
39694: ST_TO_ADDR
// y := GetY ( un ) ;
39695: LD_ADDR_VAR 0 4
39699: PUSH
39700: LD_VAR 0 1
39704: PPUSH
39705: CALL_OW 251
39709: ST_TO_ADDR
// for w in us_fort do
39710: LD_ADDR_VAR 0 2
39714: PUSH
39715: LD_LOC 81
39719: PUSH
39720: FOR_IN
39721: IFFALSE 39782
// begin if ( x = w [ 1 ] ) and ( y = w [ 2 ] ) then
39723: LD_VAR 0 3
39727: PUSH
39728: LD_VAR 0 2
39732: PUSH
39733: LD_INT 1
39735: ARRAY
39736: EQUAL
39737: PUSH
39738: LD_VAR 0 4
39742: PUSH
39743: LD_VAR 0 2
39747: PUSH
39748: LD_INT 2
39750: ARRAY
39751: EQUAL
39752: AND
39753: IFFALSE 39773
// ComPlaceWeapon ( un , w [ 3 ] ) ;
39755: LD_VAR 0 1
39759: PPUSH
39760: LD_VAR 0 2
39764: PUSH
39765: LD_INT 3
39767: ARRAY
39768: PPUSH
39769: CALL_OW 148
// wait ( 8 ) ;
39773: LD_INT 8
39775: PPUSH
39776: CALL_OW 67
// end ;
39780: GO 39720
39782: POP
39783: POP
// wait ( 27 ) ;
39784: LD_INT 27
39786: PPUSH
39787: CALL_OW 67
// end ;
39791: GO 39677
39793: POP
39794: POP
// wait ( Rand ( 0 0$5 , 0 0$10 ) ) ;
39795: LD_INT 175
39797: PPUSH
39798: LD_INT 350
39800: PPUSH
39801: CALL_OW 12
39805: PPUSH
39806: CALL_OW 67
// enable ;
39810: ENABLE
// end ;
39811: PPOPN 5
39813: END
// every 0 0$10.7 do var un , w , x , y , list ;
39814: GO 39816
39816: DISABLE
39817: LD_INT 0
39819: PPUSH
39820: PPUSH
39821: PPUSH
39822: PPUSH
39823: PPUSH
// begin list := FilterAllUnits ( [ [ f_side , ru ] , [ f_or , [ f_btype , b_bunker ] , [ f_btype , b_turret ] ] , [ f_constructed ] , f_not , [ f_or , [ f_bweapon , ru_rocket ] , [ f_bweapon , ru_heavy_gun ] , [ f_bweapon , ru_time_lapser ] , [ f_bweapon , ru_gatling_gun ] ] ] ) ;
39824: LD_ADDR_VAR 0 5
39828: PUSH
39829: LD_INT 22
39831: PUSH
39832: LD_EXP 2
39836: PUSH
39837: EMPTY
39838: LIST
39839: LIST
39840: PUSH
39841: LD_INT 2
39843: PUSH
39844: LD_INT 30
39846: PUSH
39847: LD_INT 32
39849: PUSH
39850: EMPTY
39851: LIST
39852: LIST
39853: PUSH
39854: LD_INT 30
39856: PUSH
39857: LD_INT 33
39859: PUSH
39860: EMPTY
39861: LIST
39862: LIST
39863: PUSH
39864: EMPTY
39865: LIST
39866: LIST
39867: LIST
39868: PUSH
39869: LD_INT 57
39871: PUSH
39872: EMPTY
39873: LIST
39874: PUSH
39875: LD_INT 3
39877: PUSH
39878: LD_INT 2
39880: PUSH
39881: LD_INT 35
39883: PUSH
39884: LD_INT 47
39886: PUSH
39887: EMPTY
39888: LIST
39889: LIST
39890: PUSH
39891: LD_INT 35
39893: PUSH
39894: LD_INT 46
39896: PUSH
39897: EMPTY
39898: LIST
39899: LIST
39900: PUSH
39901: LD_INT 35
39903: PUSH
39904: LD_INT 49
39906: PUSH
39907: EMPTY
39908: LIST
39909: LIST
39910: PUSH
39911: LD_INT 35
39913: PUSH
39914: LD_INT 43
39916: PUSH
39917: EMPTY
39918: LIST
39919: LIST
39920: PUSH
39921: EMPTY
39922: LIST
39923: LIST
39924: LIST
39925: LIST
39926: LIST
39927: PUSH
39928: EMPTY
39929: LIST
39930: LIST
39931: LIST
39932: LIST
39933: LIST
39934: PPUSH
39935: CALL_OW 69
39939: ST_TO_ADDR
// for un in list do
39940: LD_ADDR_VAR 0 1
39944: PUSH
39945: LD_VAR 0 5
39949: PUSH
39950: FOR_IN
39951: IFFALSE 40066
// begin x := GetX ( un ) ;
39953: LD_ADDR_VAR 0 3
39957: PUSH
39958: LD_VAR 0 1
39962: PPUSH
39963: CALL_OW 250
39967: ST_TO_ADDR
// y := GetY ( un ) ;
39968: LD_ADDR_VAR 0 4
39972: PUSH
39973: LD_VAR 0 1
39977: PPUSH
39978: CALL_OW 251
39982: ST_TO_ADDR
// for w in ru_fort do
39983: LD_ADDR_VAR 0 2
39987: PUSH
39988: LD_LOC 82
39992: PUSH
39993: FOR_IN
39994: IFFALSE 40055
// begin if ( x = w [ 1 ] ) and ( y = w [ 2 ] ) then
39996: LD_VAR 0 3
40000: PUSH
40001: LD_VAR 0 2
40005: PUSH
40006: LD_INT 1
40008: ARRAY
40009: EQUAL
40010: PUSH
40011: LD_VAR 0 4
40015: PUSH
40016: LD_VAR 0 2
40020: PUSH
40021: LD_INT 2
40023: ARRAY
40024: EQUAL
40025: AND
40026: IFFALSE 40046
// ComPlaceWeapon ( un , w [ 3 ] ) ;
40028: LD_VAR 0 1
40032: PPUSH
40033: LD_VAR 0 2
40037: PUSH
40038: LD_INT 3
40040: ARRAY
40041: PPUSH
40042: CALL_OW 148
// wait ( 8 ) ;
40046: LD_INT 8
40048: PPUSH
40049: CALL_OW 67
// end ;
40053: GO 39993
40055: POP
40056: POP
// wait ( 27 ) ;
40057: LD_INT 27
40059: PPUSH
40060: CALL_OW 67
// end ;
40064: GO 39950
40066: POP
40067: POP
// wait ( Rand ( 0 0$5 , 0 0$10 ) ) ;
40068: LD_INT 175
40070: PPUSH
40071: LD_INT 350
40073: PPUSH
40074: CALL_OW 12
40078: PPUSH
40079: CALL_OW 67
// enable ;
40083: ENABLE
// end ;
40084: PPOPN 5
40086: END
