// export you , you2 , russians , arabians , neutral ; export apemans ; export oma ; export om ; export arabs_cars ; export JMM ; export Glad ; export Har ; export Den , Lisa , Frank ; export Don , Brown ; export Bobby , Cyrus ; export Denis ; export Sol1 , Sol2 , Sci ; export Car1 , Car2 , Car3 ; export CameFromXY ; export map_size_x , map_size_y ; export first_ape ; export was_first_attack ; export away_from_last_attack ; export first_attack ; export mine_attack ; export thief_attack ; export lonely_attack ; export next_attack ; export attacking ; export attacky ; export opic ; export cil_mit_1_ape_eng_splnen ; export cil_mit_5_ape_eng_splnen ; export zasilka_muze ; export zasilka_landed ; export denis_can_come ; export RadarBuild ; export tvoji_lidi ; export not_char ; export opicaci ; export ztraty ; export uz_je_cas ; export added_apes ; export max_added_apes ; export mat_crates ; export all , used , other ; export Gamma2Commander ; starting begin map_size_x := 100 ;
   0: LD_ADDR_EXP 28
   4: PUSH
   5: LD_INT 100
   7: ST_TO_ADDR
// map_size_y := 80 ;
   8: LD_ADDR_EXP 29
  12: PUSH
  13: LD_INT 80
  15: ST_TO_ADDR
// prepare_sides ;
  16: CALL 966 0 0
// prepare_yours_cars ;
  20: CALL 285 0 0
// load_units ;
  24: CALL 467 0 0
// SetDifficulty ;
  28: CALL 1034 0 0
// apemans := FilterAllUnits ( [ [ f_nation , nation_nature ] ] ) ;
  32: LD_ADDR_EXP 6
  36: PUSH
  37: LD_INT 23
  39: PUSH
  40: LD_INT 0
  42: PUSH
  43: EMPTY
  44: LIST
  45: LIST
  46: PUSH
  47: EMPTY
  48: LIST
  49: PPUSH
  50: CALL_OW 69
  54: ST_TO_ADDR
// was_first_attack := false ;
  55: LD_ADDR_EXP 31
  59: PUSH
  60: LD_INT 0
  62: ST_TO_ADDR
// first_attack := false ;
  63: LD_ADDR_EXP 33
  67: PUSH
  68: LD_INT 0
  70: ST_TO_ADDR
// mine_attack := false ;
  71: LD_ADDR_EXP 34
  75: PUSH
  76: LD_INT 0
  78: ST_TO_ADDR
// thief_attack := false ;
  79: LD_ADDR_EXP 35
  83: PUSH
  84: LD_INT 0
  86: ST_TO_ADDR
// lonely_attack := false ;
  87: LD_ADDR_EXP 36
  91: PUSH
  92: LD_INT 0
  94: ST_TO_ADDR
// next_attack := false ;
  95: LD_ADDR_EXP 37
  99: PUSH
 100: LD_INT 0
 102: ST_TO_ADDR
// attacking := false ;
 103: LD_ADDR_EXP 38
 107: PUSH
 108: LD_INT 0
 110: ST_TO_ADDR
// attacky := 0 ;
 111: LD_ADDR_EXP 39
 115: PUSH
 116: LD_INT 0
 118: ST_TO_ADDR
// CameFromXY := [ [ 110 , 31 ] , [ 106 , 23 ] , [ 123 , 74 ] , [ 120 , 74 ] , [ 74 , 6 ] , [ 83 , 75 ] , [ 39 , 4 ] ] ;
 119: LD_ADDR_EXP 27
 123: PUSH
 124: LD_INT 110
 126: PUSH
 127: LD_INT 31
 129: PUSH
 130: EMPTY
 131: LIST
 132: LIST
 133: PUSH
 134: LD_INT 106
 136: PUSH
 137: LD_INT 23
 139: PUSH
 140: EMPTY
 141: LIST
 142: LIST
 143: PUSH
 144: LD_INT 123
 146: PUSH
 147: LD_INT 74
 149: PUSH
 150: EMPTY
 151: LIST
 152: LIST
 153: PUSH
 154: LD_INT 120
 156: PUSH
 157: LD_INT 74
 159: PUSH
 160: EMPTY
 161: LIST
 162: LIST
 163: PUSH
 164: LD_INT 74
 166: PUSH
 167: LD_INT 6
 169: PUSH
 170: EMPTY
 171: LIST
 172: LIST
 173: PUSH
 174: LD_INT 83
 176: PUSH
 177: LD_INT 75
 179: PUSH
 180: EMPTY
 181: LIST
 182: LIST
 183: PUSH
 184: LD_INT 39
 186: PUSH
 187: LD_INT 4
 189: PUSH
 190: EMPTY
 191: LIST
 192: LIST
 193: PUSH
 194: EMPTY
 195: LIST
 196: LIST
 197: LIST
 198: LIST
 199: LIST
 200: LIST
 201: LIST
 202: ST_TO_ADDR
// opic := 0 ;
 203: LD_ADDR_EXP 40
 207: PUSH
 208: LD_INT 0
 210: ST_TO_ADDR
// zasilka_muze := false ;
 211: LD_ADDR_EXP 43
 215: PUSH
 216: LD_INT 0
 218: ST_TO_ADDR
// denis_can_come := false ;
 219: LD_ADDR_EXP 45
 223: PUSH
 224: LD_INT 0
 226: ST_TO_ADDR
// budovy := [ ] ;
 227: LD_ADDR_EXP 63
 231: PUSH
 232: EMPTY
 233: ST_TO_ADDR
// laboratore := [ ] ;
 234: LD_ADDR_EXP 62
 238: PUSH
 239: EMPTY
 240: ST_TO_ADDR
// tvoji_lidi := [ ] ;
 241: LD_ADDR_EXP 47
 245: PUSH
 246: EMPTY
 247: ST_TO_ADDR
// ztraty := 0 ;
 248: LD_ADDR_EXP 50
 252: PUSH
 253: LD_INT 0
 255: ST_TO_ADDR
// added_apes := 0 ;
 256: LD_ADDR_EXP 52
 260: PUSH
 261: LD_INT 0
 263: ST_TO_ADDR
// max_added_apes := 10 ;
 264: LD_ADDR_EXP 53
 268: PUSH
 269: LD_INT 10
 271: ST_TO_ADDR
// uz_je_cas := false ;
 272: LD_ADDR_EXP 51
 276: PUSH
 277: LD_INT 0
 279: ST_TO_ADDR
// Dialog1 ;
 280: CALL 3293 0 0
// end ;
 284: END
// function prepare_yours_cars ; begin
 285: LD_INT 0
 287: PPUSH
// InitUc ;
 288: CALL_OW 18
// InitHc ;
 292: CALL_OW 19
// InitVc ;
 296: CALL_OW 20
// uc_side := you ;
 300: LD_ADDR_OWVAR 20
 304: PUSH
 305: LD_EXP 1
 309: ST_TO_ADDR
// uc_nation := nation_american ;
 310: LD_ADDR_OWVAR 21
 314: PUSH
 315: LD_INT 1
 317: ST_TO_ADDR
// vc_chassis := us_light_wheeled ;
 318: LD_ADDR_OWVAR 37
 322: PUSH
 323: LD_INT 1
 325: ST_TO_ADDR
// vc_control := control_manual ;
 326: LD_ADDR_OWVAR 38
 330: PUSH
 331: LD_INT 1
 333: ST_TO_ADDR
// vc_engine := engine_solar ;
 334: LD_ADDR_OWVAR 39
 338: PUSH
 339: LD_INT 2
 341: ST_TO_ADDR
// vc_weapon := us_machine_gun ;
 342: LD_ADDR_OWVAR 40
 346: PUSH
 347: LD_INT 2
 349: ST_TO_ADDR
// Car1 := CreateVehicle ;
 350: LD_ADDR_EXP 24
 354: PUSH
 355: CALL_OW 45
 359: ST_TO_ADDR
// vc_chassis := us_light_wheeled ;
 360: LD_ADDR_OWVAR 37
 364: PUSH
 365: LD_INT 1
 367: ST_TO_ADDR
// vc_control := control_manual ;
 368: LD_ADDR_OWVAR 38
 372: PUSH
 373: LD_INT 1
 375: ST_TO_ADDR
// vc_engine := engine_solar ;
 376: LD_ADDR_OWVAR 39
 380: PUSH
 381: LD_INT 2
 383: ST_TO_ADDR
// vc_weapon := us_machine_gun ;
 384: LD_ADDR_OWVAR 40
 388: PUSH
 389: LD_INT 2
 391: ST_TO_ADDR
// Car2 := CreateVehicle ;
 392: LD_ADDR_EXP 25
 396: PUSH
 397: CALL_OW 45
 401: ST_TO_ADDR
// vc_chassis := us_medium_wheeled ;
 402: LD_ADDR_OWVAR 37
 406: PUSH
 407: LD_INT 2
 409: ST_TO_ADDR
// vc_control := control_manual ;
 410: LD_ADDR_OWVAR 38
 414: PUSH
 415: LD_INT 1
 417: ST_TO_ADDR
// vc_engine := engine_solar ;
 418: LD_ADDR_OWVAR 39
 422: PUSH
 423: LD_INT 2
 425: ST_TO_ADDR
// vc_weapon := us_cargo_bay ;
 426: LD_ADDR_OWVAR 40
 430: PUSH
 431: LD_INT 12
 433: ST_TO_ADDR
// Car3 := CreateVehicle ;
 434: LD_ADDR_EXP 26
 438: PUSH
 439: CALL_OW 45
 443: ST_TO_ADDR
// SetCargo ( [ Car3 ] , mat_cans , 100 ) ;
 444: LD_EXP 26
 448: PUSH
 449: EMPTY
 450: LIST
 451: PPUSH
 452: LD_INT 1
 454: PPUSH
 455: LD_INT 100
 457: PPUSH
 458: CALL_OW 290
// end ;
 462: LD_VAR 0 1
 466: RET
// function load_units ; begin
 467: LD_INT 0
 469: PPUSH
// InitUc ;
 470: CALL_OW 18
// InitHc ;
 474: CALL_OW 19
// InitVc ;
 478: CALL_OW 20
// uc_side := you ;
 482: LD_ADDR_OWVAR 20
 486: PUSH
 487: LD_EXP 1
 491: ST_TO_ADDR
// uc_nation := nation_american ;
 492: LD_ADDR_OWVAR 21
 496: PUSH
 497: LD_INT 1
 499: ST_TO_ADDR
// JMM := CreateCharacter ( JMM ) ;
 500: LD_ADDR_EXP 10
 504: PUSH
 505: LD_STRING JMM
 507: PPUSH
 508: CALL_OW 34
 512: ST_TO_ADDR
// Glad := CreateCharacter ( Gladstone ) ;
 513: LD_ADDR_EXP 11
 517: PUSH
 518: LD_STRING Gladstone
 520: PPUSH
 521: CALL_OW 34
 525: ST_TO_ADDR
// Har := NewCharacter ( Harisson ) ;
 526: LD_ADDR_EXP 12
 530: PUSH
 531: LD_STRING Harisson
 533: PPUSH
 534: CALL_OW 25
 538: ST_TO_ADDR
// Denis := NewCharacter ( Denis ) ;
 539: LD_ADDR_EXP 20
 543: PUSH
 544: LD_STRING Denis
 546: PPUSH
 547: CALL_OW 25
 551: ST_TO_ADDR
// if TestCharacters ( otherDelta ) then
 552: LD_STRING otherDelta
 554: PPUSH
 555: CALL_OW 28
 559: IFFALSE 576
// used := CreateCharacterSet ( otherDelta ) else
 561: LD_ADDR_EXP 56
 565: PUSH
 566: LD_STRING otherDelta
 568: PPUSH
 569: CALL_OW 31
 573: ST_TO_ADDR
 574: GO 583
// used := [ ] ;
 576: LD_ADDR_EXP 56
 580: PUSH
 581: EMPTY
 582: ST_TO_ADDR
// Lisa := 0 ;
 583: LD_ADDR_EXP 14
 587: PUSH
 588: LD_INT 0
 590: ST_TO_ADDR
// if CheckCharacterSet ( Lisa ) then
 591: LD_STRING Lisa
 593: PPUSH
 594: CALL_OW 29
 598: IFFALSE 629
// if LoadVariable ( LisaLoc , 0 ) = 3 then
 600: LD_STRING LisaLoc
 602: PPUSH
 603: LD_INT 0
 605: PPUSH
 606: CALL_OW 30
 610: PUSH
 611: LD_INT 3
 613: EQUAL
 614: IFFALSE 629
// Lisa := CreateCharacter ( Lisa ) ;
 616: LD_ADDR_EXP 14
 620: PUSH
 621: LD_STRING Lisa
 623: PPUSH
 624: CALL_OW 34
 628: ST_TO_ADDR
// Cyrus := 0 ;
 629: LD_ADDR_EXP 19
 633: PUSH
 634: LD_INT 0
 636: ST_TO_ADDR
// if CheckCharacterSet ( Cyrus ) then
 637: LD_STRING Cyrus
 639: PPUSH
 640: CALL_OW 29
 644: IFFALSE 675
// if LoadVariable ( CyrusLoc , 0 ) = 3 then
 646: LD_STRING CyrusLoc
 648: PPUSH
 649: LD_INT 0
 651: PPUSH
 652: CALL_OW 30
 656: PUSH
 657: LD_INT 3
 659: EQUAL
 660: IFFALSE 675
// Cyrus := CreateCharacter ( Cyrus ) ;
 662: LD_ADDR_EXP 19
 666: PUSH
 667: LD_STRING Cyrus
 669: PPUSH
 670: CALL_OW 34
 674: ST_TO_ADDR
// Bobby := 0 ;
 675: LD_ADDR_EXP 18
 679: PUSH
 680: LD_INT 0
 682: ST_TO_ADDR
// if CheckCharacterSet ( Bobby ) then
 683: LD_STRING Bobby
 685: PPUSH
 686: CALL_OW 29
 690: IFFALSE 721
// if LoadVariable ( BobbyLoc , 0 ) = 3 then
 692: LD_STRING BobbyLoc
 694: PPUSH
 695: LD_INT 0
 697: PPUSH
 698: CALL_OW 30
 702: PUSH
 703: LD_INT 3
 705: EQUAL
 706: IFFALSE 721
// Bobby := CreateCharacter ( Bobby ) ;
 708: LD_ADDR_EXP 18
 712: PUSH
 713: LD_STRING Bobby
 715: PPUSH
 716: CALL_OW 34
 720: ST_TO_ADDR
// Frank := 0 ;
 721: LD_ADDR_EXP 15
 725: PUSH
 726: LD_INT 0
 728: ST_TO_ADDR
// if CheckCharacterSet ( Frank ) then
 729: LD_STRING Frank
 731: PPUSH
 732: CALL_OW 29
 736: IFFALSE 767
// if LoadVariable ( FrankLoc , 0 ) = 3 then
 738: LD_STRING FrankLoc
 740: PPUSH
 741: LD_INT 0
 743: PPUSH
 744: CALL_OW 30
 748: PUSH
 749: LD_INT 3
 751: EQUAL
 752: IFFALSE 767
// Frank := CreateCharacter ( Frank ) ;
 754: LD_ADDR_EXP 15
 758: PUSH
 759: LD_STRING Frank
 761: PPUSH
 762: CALL_OW 34
 766: ST_TO_ADDR
// Don := 0 ;
 767: LD_ADDR_EXP 16
 771: PUSH
 772: LD_INT 0
 774: ST_TO_ADDR
// if CheckCharacterSet ( Donaldson ) then
 775: LD_STRING Donaldson
 777: PPUSH
 778: CALL_OW 29
 782: IFFALSE 813
// if LoadVariable ( DonaldsonLoc , 0 ) = 3 then
 784: LD_STRING DonaldsonLoc
 786: PPUSH
 787: LD_INT 0
 789: PPUSH
 790: CALL_OW 30
 794: PUSH
 795: LD_INT 3
 797: EQUAL
 798: IFFALSE 813
// Don := CreateCharacter ( Donaldson ) ;
 800: LD_ADDR_EXP 16
 804: PUSH
 805: LD_STRING Donaldson
 807: PPUSH
 808: CALL_OW 34
 812: ST_TO_ADDR
// Brown := 0 ;
 813: LD_ADDR_EXP 17
 817: PUSH
 818: LD_INT 0
 820: ST_TO_ADDR
// if CheckCharacterSet ( Brown ) then
 821: LD_STRING Brown
 823: PPUSH
 824: CALL_OW 29
 828: IFFALSE 859
// if LoadVariable ( BrownLoc , 0 ) = 3 then
 830: LD_STRING BrownLoc
 832: PPUSH
 833: LD_INT 0
 835: PPUSH
 836: CALL_OW 30
 840: PUSH
 841: LD_INT 3
 843: EQUAL
 844: IFFALSE 859
// Brown := CreateCharacter ( Brown ) ;
 846: LD_ADDR_EXP 17
 850: PUSH
 851: LD_STRING Brown
 853: PPUSH
 854: CALL_OW 34
 858: ST_TO_ADDR
// used := ( [ JMM , Glad , Lisa , Cyrus , Bobby , Frank , Don , Brown ] diff [ 0 ] ) ^ used ;
 859: LD_ADDR_EXP 56
 863: PUSH
 864: LD_EXP 10
 868: PUSH
 869: LD_EXP 11
 873: PUSH
 874: LD_EXP 14
 878: PUSH
 879: LD_EXP 19
 883: PUSH
 884: LD_EXP 18
 888: PUSH
 889: LD_EXP 15
 893: PUSH
 894: LD_EXP 16
 898: PUSH
 899: LD_EXP 17
 903: PUSH
 904: EMPTY
 905: LIST
 906: LIST
 907: LIST
 908: LIST
 909: LIST
 910: LIST
 911: LIST
 912: LIST
 913: PUSH
 914: LD_INT 0
 916: PUSH
 917: EMPTY
 918: LIST
 919: DIFF
 920: PUSH
 921: LD_EXP 56
 925: ADD
 926: ST_TO_ADDR
// if not UnitFilter ( used , [ f_class , class_engineer ] ) then
 927: LD_EXP 56
 931: PPUSH
 932: LD_INT 25
 934: PUSH
 935: LD_INT 2
 937: PUSH
 938: EMPTY
 939: LIST
 940: LIST
 941: PPUSH
 942: CALL_OW 72
 946: NOT
 947: IFFALSE 961
// SetClass ( JMM , class_engineer ) ;
 949: LD_EXP 10
 953: PPUSH
 954: LD_INT 2
 956: PPUSH
 957: CALL_OW 336
// end ;
 961: LD_VAR 0 1
 965: RET
// function prepare_sides ; begin
 966: LD_INT 0
 968: PPUSH
// you := 1 ;
 969: LD_ADDR_EXP 1
 973: PUSH
 974: LD_INT 1
 976: ST_TO_ADDR
// you2 := 4 ;
 977: LD_ADDR_EXP 2
 981: PUSH
 982: LD_INT 4
 984: ST_TO_ADDR
// arabians := 2 ;
 985: LD_ADDR_EXP 4
 989: PUSH
 990: LD_INT 2
 992: ST_TO_ADDR
// russians := 3 ;
 993: LD_ADDR_EXP 3
 997: PUSH
 998: LD_INT 3
1000: ST_TO_ADDR
// neutral := 0 ;
1001: LD_ADDR_EXP 5
1005: PUSH
1006: LD_INT 0
1008: ST_TO_ADDR
// SetAttitude ( arabians , you , att_enemy , true ) ;
1009: LD_EXP 4
1013: PPUSH
1014: LD_EXP 1
1018: PPUSH
1019: LD_INT 2
1021: PPUSH
1022: LD_INT 1
1024: PPUSH
1025: CALL_OW 80
// end ;
1029: LD_VAR 0 1
1033: RET
// export wait_first_attack ; export utoku ; function SetDifficulty ; begin
1034: LD_INT 0
1036: PPUSH
// wait_first_attack := [ 1 1$20 , 0 0$50 , 0 0$35 ] [ difficulty ] ;
1037: LD_ADDR_EXP 59
1041: PUSH
1042: LD_INT 2800
1044: PUSH
1045: LD_INT 1750
1047: PUSH
1048: LD_INT 1225
1050: PUSH
1051: EMPTY
1052: LIST
1053: LIST
1054: LIST
1055: PUSH
1056: LD_OWVAR 67
1060: ARRAY
1061: ST_TO_ADDR
// utoku := [ 9 , 12 , 19 ] [ difficulty ] ;
1062: LD_ADDR_EXP 60
1066: PUSH
1067: LD_INT 9
1069: PUSH
1070: LD_INT 12
1072: PUSH
1073: LD_INT 19
1075: PUSH
1076: EMPTY
1077: LIST
1078: LIST
1079: LIST
1080: PUSH
1081: LD_OWVAR 67
1085: ARRAY
1086: ST_TO_ADDR
// end ;
1087: LD_VAR 0 1
1091: RET
// export function make_arabs ( pocet , unitclass ) ; var list , arab , d ; begin
1092: LD_INT 0
1094: PPUSH
1095: PPUSH
1096: PPUSH
1097: PPUSH
// InitUc ;
1098: CALL_OW 18
// InitHc ;
1102: CALL_OW 19
// uc_side := arabians ;
1106: LD_ADDR_OWVAR 20
1110: PUSH
1111: LD_EXP 4
1115: ST_TO_ADDR
// uc_nation := nation_arabian ;
1116: LD_ADDR_OWVAR 21
1120: PUSH
1121: LD_INT 2
1123: ST_TO_ADDR
// d := difficulty - 1 ;
1124: LD_ADDR_VAR 0 6
1128: PUSH
1129: LD_OWVAR 67
1133: PUSH
1134: LD_INT 1
1136: MINUS
1137: ST_TO_ADDR
// while pocet > 0 do
1138: LD_VAR 0 1
1142: PUSH
1143: LD_INT 0
1145: GREATER
1146: IFFALSE 1790
// begin hc_class := unitclass ;
1148: LD_ADDR_OWVAR 28
1152: PUSH
1153: LD_VAR 0 2
1157: ST_TO_ADDR
// if Rand ( 1 , 10 ) >= 4 then
1158: LD_INT 1
1160: PPUSH
1161: LD_INT 10
1163: PPUSH
1164: CALL_OW 12
1168: PUSH
1169: LD_INT 4
1171: GREATEREQUAL
1172: IFFALSE 1184
// hc_sex := sex_female else
1174: LD_ADDR_OWVAR 27
1178: PUSH
1179: LD_INT 2
1181: ST_TO_ADDR
1182: GO 1192
// hc_sex := sex_male ;
1184: LD_ADDR_OWVAR 27
1188: PUSH
1189: LD_INT 1
1191: ST_TO_ADDR
// case unitclass of class_soldier :
1192: LD_VAR 0 2
1196: PUSH
1197: LD_INT 1
1199: DOUBLE
1200: EQUAL
1201: IFTRUE 1205
1203: GO 1330
1205: POP
// begin hc_attr := [ Rand ( 8 , 10 ) + d , Rand ( 8 , 10 ) + d ] ;
1206: LD_ADDR_OWVAR 29
1210: PUSH
1211: LD_INT 8
1213: PPUSH
1214: LD_INT 10
1216: PPUSH
1217: CALL_OW 12
1221: PUSH
1222: LD_VAR 0 6
1226: PLUS
1227: PUSH
1228: LD_INT 8
1230: PPUSH
1231: LD_INT 10
1233: PPUSH
1234: CALL_OW 12
1238: PUSH
1239: LD_VAR 0 6
1243: PLUS
1244: PUSH
1245: EMPTY
1246: LIST
1247: LIST
1248: ST_TO_ADDR
// hc_skills := [ Rand ( 2 , 3 ) + d , Rand ( 0 , 1 ) + d , Rand ( 0 , 1 ) + d , Rand ( 0 , 0 ) + d ] ;
1249: LD_ADDR_OWVAR 31
1253: PUSH
1254: LD_INT 2
1256: PPUSH
1257: LD_INT 3
1259: PPUSH
1260: CALL_OW 12
1264: PUSH
1265: LD_VAR 0 6
1269: PLUS
1270: PUSH
1271: LD_INT 0
1273: PPUSH
1274: LD_INT 1
1276: PPUSH
1277: CALL_OW 12
1281: PUSH
1282: LD_VAR 0 6
1286: PLUS
1287: PUSH
1288: LD_INT 0
1290: PPUSH
1291: LD_INT 1
1293: PPUSH
1294: CALL_OW 12
1298: PUSH
1299: LD_VAR 0 6
1303: PLUS
1304: PUSH
1305: LD_INT 0
1307: PPUSH
1308: LD_INT 0
1310: PPUSH
1311: CALL_OW 12
1315: PUSH
1316: LD_VAR 0 6
1320: PLUS
1321: PUSH
1322: EMPTY
1323: LIST
1324: LIST
1325: LIST
1326: LIST
1327: ST_TO_ADDR
// end ; class_engineer :
1328: GO 1730
1330: LD_INT 2
1332: DOUBLE
1333: EQUAL
1334: IFTRUE 1338
1336: GO 1463
1338: POP
// begin hc_attr := [ Rand ( 8 , 9 ) + d , Rand ( 8 , 9 ) + d ] ;
1339: LD_ADDR_OWVAR 29
1343: PUSH
1344: LD_INT 8
1346: PPUSH
1347: LD_INT 9
1349: PPUSH
1350: CALL_OW 12
1354: PUSH
1355: LD_VAR 0 6
1359: PLUS
1360: PUSH
1361: LD_INT 8
1363: PPUSH
1364: LD_INT 9
1366: PPUSH
1367: CALL_OW 12
1371: PUSH
1372: LD_VAR 0 6
1376: PLUS
1377: PUSH
1378: EMPTY
1379: LIST
1380: LIST
1381: ST_TO_ADDR
// hc_skills := [ Rand ( 0 , 1 ) + d , Rand ( 2 , 3 ) + d , Rand ( 0 , 1 ) + d , Rand ( 0 , 0 ) + d ] ;
1382: LD_ADDR_OWVAR 31
1386: PUSH
1387: LD_INT 0
1389: PPUSH
1390: LD_INT 1
1392: PPUSH
1393: CALL_OW 12
1397: PUSH
1398: LD_VAR 0 6
1402: PLUS
1403: PUSH
1404: LD_INT 2
1406: PPUSH
1407: LD_INT 3
1409: PPUSH
1410: CALL_OW 12
1414: PUSH
1415: LD_VAR 0 6
1419: PLUS
1420: PUSH
1421: LD_INT 0
1423: PPUSH
1424: LD_INT 1
1426: PPUSH
1427: CALL_OW 12
1431: PUSH
1432: LD_VAR 0 6
1436: PLUS
1437: PUSH
1438: LD_INT 0
1440: PPUSH
1441: LD_INT 0
1443: PPUSH
1444: CALL_OW 12
1448: PUSH
1449: LD_VAR 0 6
1453: PLUS
1454: PUSH
1455: EMPTY
1456: LIST
1457: LIST
1458: LIST
1459: LIST
1460: ST_TO_ADDR
// end ; class_mechanic :
1461: GO 1730
1463: LD_INT 3
1465: DOUBLE
1466: EQUAL
1467: IFTRUE 1471
1469: GO 1596
1471: POP
// begin hc_attr := [ Rand ( 8 , 9 ) + d , Rand ( 8 , 9 ) + d ] ;
1472: LD_ADDR_OWVAR 29
1476: PUSH
1477: LD_INT 8
1479: PPUSH
1480: LD_INT 9
1482: PPUSH
1483: CALL_OW 12
1487: PUSH
1488: LD_VAR 0 6
1492: PLUS
1493: PUSH
1494: LD_INT 8
1496: PPUSH
1497: LD_INT 9
1499: PPUSH
1500: CALL_OW 12
1504: PUSH
1505: LD_VAR 0 6
1509: PLUS
1510: PUSH
1511: EMPTY
1512: LIST
1513: LIST
1514: ST_TO_ADDR
// hc_skills := [ Rand ( 0 , 0 ) + d , Rand ( 0 , 1 ) + d , Rand ( 2 , 3 ) + d , Rand ( 0 , 0 ) + d ] ;
1515: LD_ADDR_OWVAR 31
1519: PUSH
1520: LD_INT 0
1522: PPUSH
1523: LD_INT 0
1525: PPUSH
1526: CALL_OW 12
1530: PUSH
1531: LD_VAR 0 6
1535: PLUS
1536: PUSH
1537: LD_INT 0
1539: PPUSH
1540: LD_INT 1
1542: PPUSH
1543: CALL_OW 12
1547: PUSH
1548: LD_VAR 0 6
1552: PLUS
1553: PUSH
1554: LD_INT 2
1556: PPUSH
1557: LD_INT 3
1559: PPUSH
1560: CALL_OW 12
1564: PUSH
1565: LD_VAR 0 6
1569: PLUS
1570: PUSH
1571: LD_INT 0
1573: PPUSH
1574: LD_INT 0
1576: PPUSH
1577: CALL_OW 12
1581: PUSH
1582: LD_VAR 0 6
1586: PLUS
1587: PUSH
1588: EMPTY
1589: LIST
1590: LIST
1591: LIST
1592: LIST
1593: ST_TO_ADDR
// end ; class_scientistic :
1594: GO 1730
1596: LD_INT 4
1598: DOUBLE
1599: EQUAL
1600: IFTRUE 1604
1602: GO 1729
1604: POP
// begin hc_attr := [ Rand ( 8 , 8 ) + d , Rand ( 8 , 8 ) + d ] ;
1605: LD_ADDR_OWVAR 29
1609: PUSH
1610: LD_INT 8
1612: PPUSH
1613: LD_INT 8
1615: PPUSH
1616: CALL_OW 12
1620: PUSH
1621: LD_VAR 0 6
1625: PLUS
1626: PUSH
1627: LD_INT 8
1629: PPUSH
1630: LD_INT 8
1632: PPUSH
1633: CALL_OW 12
1637: PUSH
1638: LD_VAR 0 6
1642: PLUS
1643: PUSH
1644: EMPTY
1645: LIST
1646: LIST
1647: ST_TO_ADDR
// hc_skills := [ Rand ( 0 , 1 ) + d , Rand ( 0 , 1 ) + d , Rand ( 1 , 2 ) + d , Rand ( 2 , 3 ) + d ] ;
1648: LD_ADDR_OWVAR 31
1652: PUSH
1653: LD_INT 0
1655: PPUSH
1656: LD_INT 1
1658: PPUSH
1659: CALL_OW 12
1663: PUSH
1664: LD_VAR 0 6
1668: PLUS
1669: PUSH
1670: LD_INT 0
1672: PPUSH
1673: LD_INT 1
1675: PPUSH
1676: CALL_OW 12
1680: PUSH
1681: LD_VAR 0 6
1685: PLUS
1686: PUSH
1687: LD_INT 1
1689: PPUSH
1690: LD_INT 2
1692: PPUSH
1693: CALL_OW 12
1697: PUSH
1698: LD_VAR 0 6
1702: PLUS
1703: PUSH
1704: LD_INT 2
1706: PPUSH
1707: LD_INT 3
1709: PPUSH
1710: CALL_OW 12
1714: PUSH
1715: LD_VAR 0 6
1719: PLUS
1720: PUSH
1721: EMPTY
1722: LIST
1723: LIST
1724: LIST
1725: LIST
1726: ST_TO_ADDR
// end ; end ;
1727: GO 1730
1729: POP
// arab := CreateHuman ;
1730: LD_ADDR_VAR 0 5
1734: PUSH
1735: CALL_OW 44
1739: ST_TO_ADDR
// if list then
1740: LD_VAR 0 4
1744: IFFALSE 1764
// list := list ^ arab else
1746: LD_ADDR_VAR 0 4
1750: PUSH
1751: LD_VAR 0 4
1755: PUSH
1756: LD_VAR 0 5
1760: ADD
1761: ST_TO_ADDR
1762: GO 1774
// list := arab ;
1764: LD_ADDR_VAR 0 4
1768: PUSH
1769: LD_VAR 0 5
1773: ST_TO_ADDR
// pocet := pocet - 1 ;
1774: LD_ADDR_VAR 0 1
1778: PUSH
1779: LD_VAR 0 1
1783: PUSH
1784: LD_INT 1
1786: MINUS
1787: ST_TO_ADDR
// end ;
1788: GO 1138
// result := list ;
1790: LD_ADDR_VAR 0 3
1794: PUSH
1795: LD_VAR 0 4
1799: ST_TO_ADDR
// end ;
1800: LD_VAR 0 3
1804: RET
// every 0 0$2 trigger not cil_mit_1_ape_eng_splnen and UnitFilter ( apemans , [ f_side , neutral ] ) + ( max_added_apes - added_apes ) < ( 2 - opic ) do
1805: LD_EXP 41
1809: NOT
1810: PUSH
1811: LD_EXP 6
1815: PPUSH
1816: LD_INT 22
1818: PUSH
1819: LD_EXP 5
1823: PUSH
1824: EMPTY
1825: LIST
1826: LIST
1827: PPUSH
1828: CALL_OW 72
1832: PUSH
1833: LD_EXP 53
1837: PUSH
1838: LD_EXP 52
1842: MINUS
1843: PLUS
1844: PUSH
1845: LD_INT 2
1847: PUSH
1848: LD_EXP 40
1852: MINUS
1853: LESS
1854: AND
1855: IFFALSE 1870
1857: GO 1859
1859: DISABLE
// begin disable ( 0 ) ;
1860: LD_INT 0
1862: DISABLE_MARKED
// YouLost ( Apeman ) ;
1863: LD_STRING Apeman
1865: PPUSH
1866: CALL_OW 104
// end ;
1870: END
// every 0 0$2 trigger not GetTech ( tech_ApePsych , you ) = state_researched and not laboratore and KolikCrates < 20 and mat_crates = 3 do
1871: LD_INT 2
1873: PPUSH
1874: LD_EXP 1
1878: PPUSH
1879: CALL_OW 321
1883: PUSH
1884: LD_INT 2
1886: EQUAL
1887: NOT
1888: PUSH
1889: LD_EXP 62
1893: NOT
1894: AND
1895: PUSH
1896: CALL 3066 0 0
1900: PUSH
1901: LD_INT 20
1903: LESS
1904: AND
1905: PUSH
1906: LD_EXP 54
1910: PUSH
1911: LD_INT 3
1913: EQUAL
1914: AND
1915: IFFALSE 1930
1917: GO 1919
1919: DISABLE
// begin disable ( 0 ) ;
1920: LD_INT 0
1922: DISABLE_MARKED
// YouLost ( Resources ) ;
1923: LD_STRING Resources
1925: PPUSH
1926: CALL_OW 104
// end ;
1930: END
// every 0 0$10 trigger RadarBuild and cil_mit_5_ape_eng_splnen do
1931: LD_EXP 46
1935: PUSH
1936: LD_EXP 42
1940: AND
1941: IFFALSE 1957
1943: GO 1945
1945: DISABLE
// begin wait ( 0 0$8 ) ;
1946: LD_INT 280
1948: PPUSH
1949: CALL_OW 67
// Vyhra ;
1953: CALL 3183 0 0
// end ;
1957: END
// export function Save ; var Delta , tmp , t ; begin
1958: LD_INT 0
1960: PPUSH
1961: PPUSH
1962: PPUSH
1963: PPUSH
// SaveCharacters ( JMM , JMM ) ;
1964: LD_EXP 10
1968: PPUSH
1969: LD_STRING JMM
1971: PPUSH
1972: CALL_OW 38
// if Lisa then
1976: LD_EXP 14
1980: IFFALSE 2015
// begin SaveCharacters ( Lisa , Lisa ) ;
1982: LD_EXP 14
1986: PPUSH
1987: LD_STRING Lisa
1989: PPUSH
1990: CALL_OW 38
// if IsDead ( Lisa ) then
1994: LD_EXP 14
1998: PPUSH
1999: CALL_OW 301
2003: IFFALSE 2015
// SaveVariable ( 0 , LisaLoc ) ;
2005: LD_INT 0
2007: PPUSH
2008: LD_STRING LisaLoc
2010: PPUSH
2011: CALL_OW 39
// end ; if Frank then
2015: LD_EXP 15
2019: IFFALSE 2054
// begin SaveCharacters ( Frank , Frank ) ;
2021: LD_EXP 15
2025: PPUSH
2026: LD_STRING Frank
2028: PPUSH
2029: CALL_OW 38
// if IsDead ( Frank ) then
2033: LD_EXP 15
2037: PPUSH
2038: CALL_OW 301
2042: IFFALSE 2054
// SaveVariable ( 0 , FrankLoc ) ;
2044: LD_INT 0
2046: PPUSH
2047: LD_STRING FrankLoc
2049: PPUSH
2050: CALL_OW 39
// end ; if Don then
2054: LD_EXP 16
2058: IFFALSE 2093
// begin SaveCharacters ( Don , Donaldson ) ;
2060: LD_EXP 16
2064: PPUSH
2065: LD_STRING Donaldson
2067: PPUSH
2068: CALL_OW 38
// if IsDead ( Don ) then
2072: LD_EXP 16
2076: PPUSH
2077: CALL_OW 301
2081: IFFALSE 2093
// SaveVariable ( 0 , DonaldsonLoc ) ;
2083: LD_INT 0
2085: PPUSH
2086: LD_STRING DonaldsonLoc
2088: PPUSH
2089: CALL_OW 39
// end ; if Brown then
2093: LD_EXP 17
2097: IFFALSE 2132
// begin SaveCharacters ( Brown , Brown ) ;
2099: LD_EXP 17
2103: PPUSH
2104: LD_STRING Brown
2106: PPUSH
2107: CALL_OW 38
// if IsDead ( Brown ) then
2111: LD_EXP 17
2115: PPUSH
2116: CALL_OW 301
2120: IFFALSE 2132
// SaveVariable ( 0 , BrownLoc ) ;
2122: LD_INT 0
2124: PPUSH
2125: LD_STRING BrownLoc
2127: PPUSH
2128: CALL_OW 39
// end ; if Glad then
2132: LD_EXP 11
2136: IFFALSE 2183
// begin SaveCharacters ( Glad , Gladstone ) ;
2138: LD_EXP 11
2142: PPUSH
2143: LD_STRING Gladstone
2145: PPUSH
2146: CALL_OW 38
// if IsDead ( Glad ) then
2150: LD_EXP 11
2154: PPUSH
2155: CALL_OW 301
2159: IFFALSE 2173
// SaveVariable ( 0 , GladstoneLoc ) else
2161: LD_INT 0
2163: PPUSH
2164: LD_STRING GladstoneLoc
2166: PPUSH
2167: CALL_OW 39
2171: GO 2183
// SaveVariable ( 3 , GladstoneLoc ) ;
2173: LD_INT 3
2175: PPUSH
2176: LD_STRING GladstoneLoc
2178: PPUSH
2179: CALL_OW 39
// end ; if Denis then
2183: LD_EXP 20
2187: IFFALSE 2234
// begin SaveCharacters ( Den , Denis ) ;
2189: LD_EXP 13
2193: PPUSH
2194: LD_STRING Denis
2196: PPUSH
2197: CALL_OW 38
// if IsDead ( Den ) then
2201: LD_EXP 13
2205: PPUSH
2206: CALL_OW 301
2210: IFFALSE 2224
// SaveVariable ( 0 , DenisLoc ) else
2212: LD_INT 0
2214: PPUSH
2215: LD_STRING DenisLoc
2217: PPUSH
2218: CALL_OW 39
2222: GO 2234
// SaveVariable ( 3 , DenisLoc ) ;
2224: LD_INT 3
2226: PPUSH
2227: LD_STRING DenisLoc
2229: PPUSH
2230: CALL_OW 39
// end ; if Bobby then
2234: LD_EXP 18
2238: IFFALSE 2273
// begin SaveCharacters ( Bobby , Bobby ) ;
2240: LD_EXP 18
2244: PPUSH
2245: LD_STRING Bobby
2247: PPUSH
2248: CALL_OW 38
// if IsDead ( Bobby ) then
2252: LD_EXP 18
2256: PPUSH
2257: CALL_OW 301
2261: IFFALSE 2273
// SaveVariable ( 0 , BobbyLoc ) ;
2263: LD_INT 0
2265: PPUSH
2266: LD_STRING BobbyLoc
2268: PPUSH
2269: CALL_OW 39
// end ; if Cyrus then
2273: LD_EXP 19
2277: IFFALSE 2312
// begin SaveCharacters ( Cyrus , Cyrus ) ;
2279: LD_EXP 19
2283: PPUSH
2284: LD_STRING Cyrus
2286: PPUSH
2287: CALL_OW 38
// if IsDead ( Cyrus ) then
2291: LD_EXP 19
2295: PPUSH
2296: CALL_OW 301
2300: IFFALSE 2312
// SaveVariable ( 0 , CyrusLoc ) ;
2302: LD_INT 0
2304: PPUSH
2305: LD_STRING CyrusLoc
2307: PPUSH
2308: CALL_OW 39
// end ; SaveCharacters ( FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] , [ f_nation , nation_american ] ] ) diff [ JMM , Lisa , Frank , Don , Brown , Glad , Den , Bobby , Cyrus , 0 ] , otherDelta ) ;
2312: LD_INT 22
2314: PUSH
2315: LD_EXP 1
2319: PUSH
2320: EMPTY
2321: LIST
2322: LIST
2323: PUSH
2324: LD_INT 21
2326: PUSH
2327: LD_INT 1
2329: PUSH
2330: EMPTY
2331: LIST
2332: LIST
2333: PUSH
2334: LD_INT 23
2336: PUSH
2337: LD_INT 1
2339: PUSH
2340: EMPTY
2341: LIST
2342: LIST
2343: PUSH
2344: EMPTY
2345: LIST
2346: LIST
2347: LIST
2348: PPUSH
2349: CALL_OW 69
2353: PUSH
2354: LD_EXP 10
2358: PUSH
2359: LD_EXP 14
2363: PUSH
2364: LD_EXP 15
2368: PUSH
2369: LD_EXP 16
2373: PUSH
2374: LD_EXP 17
2378: PUSH
2379: LD_EXP 11
2383: PUSH
2384: LD_EXP 13
2388: PUSH
2389: LD_EXP 18
2393: PUSH
2394: LD_EXP 19
2398: PUSH
2399: LD_INT 0
2401: PUSH
2402: EMPTY
2403: LIST
2404: LIST
2405: LIST
2406: LIST
2407: LIST
2408: LIST
2409: LIST
2410: LIST
2411: LIST
2412: LIST
2413: DIFF
2414: PPUSH
2415: LD_STRING otherDelta
2417: PPUSH
2418: CALL_OW 38
// SaveCharacters ( FilterAllUnits ( [ [ f_side , you ] , [ f_nation , nation_nature ] ] ) , opicaci ) ;
2422: LD_INT 22
2424: PUSH
2425: LD_EXP 1
2429: PUSH
2430: EMPTY
2431: LIST
2432: LIST
2433: PUSH
2434: LD_INT 23
2436: PUSH
2437: LD_INT 0
2439: PUSH
2440: EMPTY
2441: LIST
2442: LIST
2443: PUSH
2444: EMPTY
2445: LIST
2446: LIST
2447: PPUSH
2448: CALL_OW 69
2452: PPUSH
2453: LD_STRING opicaci
2455: PPUSH
2456: CALL_OW 38
// tmp := FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_building ] ] ) ;
2460: LD_ADDR_VAR 0 3
2464: PUSH
2465: LD_INT 22
2467: PUSH
2468: LD_EXP 1
2472: PUSH
2473: EMPTY
2474: LIST
2475: LIST
2476: PUSH
2477: LD_INT 21
2479: PUSH
2480: LD_INT 3
2482: PUSH
2483: EMPTY
2484: LIST
2485: LIST
2486: PUSH
2487: EMPTY
2488: LIST
2489: LIST
2490: PPUSH
2491: CALL_OW 69
2495: ST_TO_ADDR
// Delta := [ ] ;
2496: LD_ADDR_VAR 0 2
2500: PUSH
2501: EMPTY
2502: ST_TO_ADDR
// for t in tmp do
2503: LD_ADDR_VAR 0 4
2507: PUSH
2508: LD_VAR 0 3
2512: PUSH
2513: FOR_IN
2514: IFFALSE 2868
// begin case getbtype ( t ) of b_lab_basic , b_lab_weapon , b_lab_biological , b_lab_computer , b_lab_opto , b_lab_siberium , b_lab_spacetime :
2516: LD_VAR 0 4
2520: PPUSH
2521: CALL_OW 266
2525: PUSH
2526: LD_INT 9
2528: DOUBLE
2529: EQUAL
2530: IFTRUE 2570
2532: LD_INT 10
2534: DOUBLE
2535: EQUAL
2536: IFTRUE 2570
2538: LD_INT 13
2540: DOUBLE
2541: EQUAL
2542: IFTRUE 2570
2544: LD_INT 12
2546: DOUBLE
2547: EQUAL
2548: IFTRUE 2570
2550: LD_INT 15
2552: DOUBLE
2553: EQUAL
2554: IFTRUE 2570
2556: LD_INT 11
2558: DOUBLE
2559: EQUAL
2560: IFTRUE 2570
2562: LD_INT 14
2564: DOUBLE
2565: EQUAL
2566: IFTRUE 2570
2568: GO 2573
2570: POP
// begin end ; b_lab , b_lab_half , b_lab_full :
2571: GO 2866
2573: LD_INT 6
2575: DOUBLE
2576: EQUAL
2577: IFTRUE 2593
2579: LD_INT 7
2581: DOUBLE
2582: EQUAL
2583: IFTRUE 2593
2585: LD_INT 8
2587: DOUBLE
2588: EQUAL
2589: IFTRUE 2593
2591: GO 2695
2593: POP
// Delta := Delta ^ [ [ GetX ( t ) , GetY ( t ) , GetDir ( t ) , GetBType ( t ) , GetBLevel ( t ) , GetLabKind ( t , 1 ) , GetLabKind ( t , 2 ) ] ] ; b_bunker , b_turret :
2594: LD_ADDR_VAR 0 2
2598: PUSH
2599: LD_VAR 0 2
2603: PUSH
2604: LD_VAR 0 4
2608: PPUSH
2609: CALL_OW 250
2613: PUSH
2614: LD_VAR 0 4
2618: PPUSH
2619: CALL_OW 251
2623: PUSH
2624: LD_VAR 0 4
2628: PPUSH
2629: CALL_OW 254
2633: PUSH
2634: LD_VAR 0 4
2638: PPUSH
2639: CALL_OW 266
2643: PUSH
2644: LD_VAR 0 4
2648: PPUSH
2649: CALL_OW 267
2653: PUSH
2654: LD_VAR 0 4
2658: PPUSH
2659: LD_INT 1
2661: PPUSH
2662: CALL_OW 268
2666: PUSH
2667: LD_VAR 0 4
2671: PPUSH
2672: LD_INT 2
2674: PPUSH
2675: CALL_OW 268
2679: PUSH
2680: EMPTY
2681: LIST
2682: LIST
2683: LIST
2684: LIST
2685: LIST
2686: LIST
2687: LIST
2688: PUSH
2689: EMPTY
2690: LIST
2691: ADD
2692: ST_TO_ADDR
2693: GO 2866
2695: LD_INT 32
2697: DOUBLE
2698: EQUAL
2699: IFTRUE 2709
2701: LD_INT 33
2703: DOUBLE
2704: EQUAL
2705: IFTRUE 2709
2707: GO 2794
2709: POP
// Delta := Delta ^ [ [ GetX ( t ) , GetY ( t ) , GetDir ( t ) , GetBType ( t ) , GetBLevel ( t ) , GetBWeapon ( t ) ] ] ; else
2710: LD_ADDR_VAR 0 2
2714: PUSH
2715: LD_VAR 0 2
2719: PUSH
2720: LD_VAR 0 4
2724: PPUSH
2725: CALL_OW 250
2729: PUSH
2730: LD_VAR 0 4
2734: PPUSH
2735: CALL_OW 251
2739: PUSH
2740: LD_VAR 0 4
2744: PPUSH
2745: CALL_OW 254
2749: PUSH
2750: LD_VAR 0 4
2754: PPUSH
2755: CALL_OW 266
2759: PUSH
2760: LD_VAR 0 4
2764: PPUSH
2765: CALL_OW 267
2769: PUSH
2770: LD_VAR 0 4
2774: PPUSH
2775: CALL_OW 269
2779: PUSH
2780: EMPTY
2781: LIST
2782: LIST
2783: LIST
2784: LIST
2785: LIST
2786: LIST
2787: PUSH
2788: EMPTY
2789: LIST
2790: ADD
2791: ST_TO_ADDR
2792: GO 2866
2794: POP
// Delta := Delta ^ [ [ GetX ( t ) , GetY ( t ) , GetDir ( t ) , GetBType ( t ) , GetBLevel ( t ) ] ] ; end ;
2795: LD_ADDR_VAR 0 2
2799: PUSH
2800: LD_VAR 0 2
2804: PUSH
2805: LD_VAR 0 4
2809: PPUSH
2810: CALL_OW 250
2814: PUSH
2815: LD_VAR 0 4
2819: PPUSH
2820: CALL_OW 251
2824: PUSH
2825: LD_VAR 0 4
2829: PPUSH
2830: CALL_OW 254
2834: PUSH
2835: LD_VAR 0 4
2839: PPUSH
2840: CALL_OW 266
2844: PUSH
2845: LD_VAR 0 4
2849: PPUSH
2850: CALL_OW 267
2854: PUSH
2855: EMPTY
2856: LIST
2857: LIST
2858: LIST
2859: LIST
2860: LIST
2861: PUSH
2862: EMPTY
2863: LIST
2864: ADD
2865: ST_TO_ADDR
// end ;
2866: GO 2513
2868: POP
2869: POP
// SaveVariable ( Delta , Delta ) ;
2870: LD_VAR 0 2
2874: PPUSH
2875: LD_STRING Delta
2877: PPUSH
2878: CALL_OW 39
// SaveVariable ( Researched ( you , tech_radar ) , RadarDeveloped ) ;
2882: LD_EXP 1
2886: PPUSH
2887: LD_INT 6
2889: PPUSH
2890: CALL_OW 325
2894: PPUSH
2895: LD_STRING RadarDeveloped
2897: PPUSH
2898: CALL_OW 39
// end ;
2902: LD_VAR 0 1
2906: RET
// export function SetMedals ; begin
2907: LD_INT 0
2909: PPUSH
// AddMedal ( Tame , cil_mit_5_ape_eng_splnen ) ;
2910: LD_STRING Tame
2912: PPUSH
2913: LD_EXP 42
2917: PPUSH
2918: CALL_OW 101
// case GetTech ( tech_Radar , you ) of state_researched :
2922: LD_INT 6
2924: PPUSH
2925: LD_EXP 1
2929: PPUSH
2930: CALL_OW 321
2934: PUSH
2935: LD_INT 2
2937: DOUBLE
2938: EQUAL
2939: IFTRUE 2943
2941: GO 2956
2943: POP
// AddMedal ( Radar , 1 ) ; state_disabled :
2944: LD_STRING Radar
2946: PPUSH
2947: LD_INT 1
2949: PPUSH
2950: CALL_OW 101
2954: GO 3001
2956: LD_INT 0
2958: DOUBLE
2959: EQUAL
2960: IFTRUE 2964
2962: GO 2978
2964: POP
// AddMedal ( Radar , - 1 ) ; state_enabled :
2965: LD_STRING Radar
2967: PPUSH
2968: LD_INT 1
2970: NEG
2971: PPUSH
2972: CALL_OW 101
2976: GO 3001
2978: LD_INT 1
2980: DOUBLE
2981: EQUAL
2982: IFTRUE 2986
2984: GO 3000
2986: POP
// AddMedal ( Radar , - 2 ) ; end ;
2987: LD_STRING Radar
2989: PPUSH
2990: LD_INT 2
2992: NEG
2993: PPUSH
2994: CALL_OW 101
2998: GO 3001
3000: POP
// if GetTech ( tech_Radar , you ) = state_disabled then
3001: LD_INT 6
3003: PPUSH
3004: LD_EXP 1
3008: PPUSH
3009: CALL_OW 321
3013: PUSH
3014: LD_INT 0
3016: EQUAL
3017: IFFALSE 3032
// begin AddMedal ( buildRadar , - 1 ) ;
3019: LD_STRING buildRadar
3021: PPUSH
3022: LD_INT 1
3024: NEG
3025: PPUSH
3026: CALL_OW 101
// end else
3030: GO 3061
// begin if RadarBuild then
3032: LD_EXP 46
3036: IFFALSE 3050
// AddMedal ( buildRadar , 1 ) else
3038: LD_STRING buildRadar
3040: PPUSH
3041: LD_INT 1
3043: PPUSH
3044: CALL_OW 101
3048: GO 3061
// AddMedal ( buildRadar , - 2 ) ;
3050: LD_STRING buildRadar
3052: PPUSH
3053: LD_INT 2
3055: NEG
3056: PPUSH
3057: CALL_OW 101
// end ; end ;
3061: LD_VAR 0 1
3065: RET
// function KolikCrates ; var base ; begin
3066: LD_INT 0
3068: PPUSH
3069: PPUSH
// result := GetCargo ( FilterAllUnits ( [ f_side , you ] ) , mat_cans ) + GetResourceArea ( all_map , mat_cans ) ;
3070: LD_ADDR_VAR 0 1
3074: PUSH
3075: LD_INT 22
3077: PUSH
3078: LD_EXP 1
3082: PUSH
3083: EMPTY
3084: LIST
3085: LIST
3086: PPUSH
3087: CALL_OW 69
3091: PPUSH
3092: LD_INT 1
3094: PPUSH
3095: CALL_OW 289
3099: PUSH
3100: LD_INT 8
3102: PPUSH
3103: LD_INT 1
3105: PPUSH
3106: CALL_OW 287
3110: PLUS
3111: ST_TO_ADDR
// base := FilterAllUnits ( [ f_type , unit_building ] ) ;
3112: LD_ADDR_VAR 0 2
3116: PUSH
3117: LD_INT 21
3119: PUSH
3120: LD_INT 3
3122: PUSH
3123: EMPTY
3124: LIST
3125: LIST
3126: PPUSH
3127: CALL_OW 69
3131: ST_TO_ADDR
// if base then
3132: LD_VAR 0 2
3136: IFFALSE 3171
// result := result + GetResourceType ( GetBase ( base [ 1 ] ) , mat_cans ) ;
3138: LD_ADDR_VAR 0 1
3142: PUSH
3143: LD_VAR 0 1
3147: PUSH
3148: LD_VAR 0 2
3152: PUSH
3153: LD_INT 1
3155: ARRAY
3156: PPUSH
3157: CALL_OW 274
3161: PPUSH
3162: LD_INT 1
3164: PPUSH
3165: CALL_OW 275
3169: PLUS
3170: ST_TO_ADDR
// end ;
3171: LD_VAR 0 1
3175: RET
// on EndTheMissionRaised ( x ) do begin Vyhra ;
3176: CALL 3183 0 0
// end ;
3180: PPOPN 1
3182: END
// export function Vyhra ; begin
3183: LD_INT 0
3185: PPUSH
// disable ( 0 ) ;
3186: LD_INT 0
3188: DISABLE_MARKED
// SetMedals ;
3189: CALL 2907 0 0
// GiveMedals ( Main ) ;
3193: LD_STRING Main
3195: PPUSH
3196: CALL_OW 102
// RewardPeople ( FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] , [ f_nation , nation_american ] ] ) ) ;
3200: LD_INT 22
3202: PUSH
3203: LD_EXP 1
3207: PUSH
3208: EMPTY
3209: LIST
3210: LIST
3211: PUSH
3212: LD_INT 21
3214: PUSH
3215: LD_INT 1
3217: PUSH
3218: EMPTY
3219: LIST
3220: LIST
3221: PUSH
3222: LD_INT 23
3224: PUSH
3225: LD_INT 1
3227: PUSH
3228: EMPTY
3229: LIST
3230: LIST
3231: PUSH
3232: EMPTY
3233: LIST
3234: LIST
3235: LIST
3236: PPUSH
3237: CALL_OW 69
3241: PPUSH
3242: CALL_OW 43
// Save ;
3246: CALL 1958 0 0
// YouWin ;
3250: CALL_OW 103
// end ;
3254: LD_VAR 0 1
3258: RET
// on UpgradeComplete ( build ) do begin if UnitFilter ( build , [ [ f_btype , b_lab_half ] ] ) then
3259: LD_VAR 0 1
3263: PPUSH
3264: LD_INT 30
3266: PUSH
3267: LD_INT 7
3269: PUSH
3270: EMPTY
3271: LIST
3272: LIST
3273: PUSH
3274: EMPTY
3275: LIST
3276: PPUSH
3277: CALL_OW 72
3281: IFFALSE 3290
// MyHint ( UpgradeLab ) ;
3283: LD_STRING UpgradeLab
3285: PPUSH
3286: CALL 15134 0 1
// end ; end_of_file
3290: PPOPN 1
3292: END
// var startx , starty , startd ; export function Dialog1 ; var qr , i , mechs , sols ; begin
3293: LD_INT 0
3295: PPUSH
3296: PPUSH
3297: PPUSH
3298: PPUSH
3299: PPUSH
// InGameOn ;
3300: CALL_OW 8
// startx := 27 ;
3304: LD_ADDR_LOC 1
3308: PUSH
3309: LD_INT 27
3311: ST_TO_ADDR
// starty := 50 ;
3312: LD_ADDR_LOC 2
3316: PUSH
3317: LD_INT 50
3319: ST_TO_ADDR
// startd := 5 ;
3320: LD_ADDR_LOC 3
3324: PUSH
3325: LD_INT 5
3327: ST_TO_ADDR
// InitUc ;
3328: CALL_OW 18
// InitHc ;
3332: CALL_OW 19
// InitVc ;
3336: CALL_OW 20
// uc_side := you ;
3340: LD_ADDR_OWVAR 20
3344: PUSH
3345: LD_EXP 1
3349: ST_TO_ADDR
// uc_nation := nation_american ;
3350: LD_ADDR_OWVAR 21
3354: PUSH
3355: LD_INT 1
3357: ST_TO_ADDR
// not_char := used diff [ JMM , Glad , Lisa , Frank ] ;
3358: LD_ADDR_EXP 48
3362: PUSH
3363: LD_EXP 56
3367: PUSH
3368: LD_EXP 10
3372: PUSH
3373: LD_EXP 11
3377: PUSH
3378: LD_EXP 14
3382: PUSH
3383: LD_EXP 15
3387: PUSH
3388: EMPTY
3389: LIST
3390: LIST
3391: LIST
3392: LIST
3393: DIFF
3394: ST_TO_ADDR
// not_char := not_char diff [ Cyrus , Bobby , Brown , Don ] ;
3395: LD_ADDR_EXP 48
3399: PUSH
3400: LD_EXP 48
3404: PUSH
3405: LD_EXP 19
3409: PUSH
3410: LD_EXP 18
3414: PUSH
3415: LD_EXP 17
3419: PUSH
3420: LD_EXP 16
3424: PUSH
3425: EMPTY
3426: LIST
3427: LIST
3428: LIST
3429: LIST
3430: DIFF
3431: ST_TO_ADDR
// if Brown in used then
3432: LD_EXP 17
3436: PUSH
3437: LD_EXP 56
3441: IN
3442: IFFALSE 3463
// not_char := not_char ^ [ Brown ] ;
3444: LD_ADDR_EXP 48
3448: PUSH
3449: LD_EXP 48
3453: PUSH
3454: LD_EXP 17
3458: PUSH
3459: EMPTY
3460: LIST
3461: ADD
3462: ST_TO_ADDR
// if Don in used then
3463: LD_EXP 16
3467: PUSH
3468: LD_EXP 56
3472: IN
3473: IFFALSE 3494
// not_char := not_char ^ [ Don ] ;
3475: LD_ADDR_EXP 48
3479: PUSH
3480: LD_EXP 48
3484: PUSH
3485: LD_EXP 16
3489: PUSH
3490: EMPTY
3491: LIST
3492: ADD
3493: ST_TO_ADDR
// if Cyrus in used then
3494: LD_EXP 19
3498: PUSH
3499: LD_EXP 56
3503: IN
3504: IFFALSE 3525
// not_char := not_char ^ [ Cyrus ] ;
3506: LD_ADDR_EXP 48
3510: PUSH
3511: LD_EXP 48
3515: PUSH
3516: LD_EXP 19
3520: PUSH
3521: EMPTY
3522: LIST
3523: ADD
3524: ST_TO_ADDR
// if Bobby in used then
3525: LD_EXP 18
3529: PUSH
3530: LD_EXP 56
3534: IN
3535: IFFALSE 3556
// not_char := not_char ^ [ Bobby ] ;
3537: LD_ADDR_EXP 48
3541: PUSH
3542: LD_EXP 48
3546: PUSH
3547: LD_EXP 18
3551: PUSH
3552: EMPTY
3553: LIST
3554: ADD
3555: ST_TO_ADDR
// mechs := UnitFilter ( used , [ [ f_class , class_mechanic ] ] ) ;
3556: LD_ADDR_VAR 0 4
3560: PUSH
3561: LD_EXP 56
3565: PPUSH
3566: LD_INT 25
3568: PUSH
3569: LD_INT 3
3571: PUSH
3572: EMPTY
3573: LIST
3574: LIST
3575: PUSH
3576: EMPTY
3577: LIST
3578: PPUSH
3579: CALL_OW 72
3583: ST_TO_ADDR
// sols := UnitFilter ( used , [ [ f_class , class_soldier ] ] ) ;
3584: LD_ADDR_VAR 0 5
3588: PUSH
3589: LD_EXP 56
3593: PPUSH
3594: LD_INT 25
3596: PUSH
3597: LD_INT 1
3599: PUSH
3600: EMPTY
3601: LIST
3602: LIST
3603: PUSH
3604: EMPTY
3605: LIST
3606: PPUSH
3607: CALL_OW 72
3611: ST_TO_ADDR
// used := mechs ^ sols ^ ( used diff ( mechs ^ sols ) ) ;
3612: LD_ADDR_EXP 56
3616: PUSH
3617: LD_VAR 0 4
3621: PUSH
3622: LD_VAR 0 5
3626: ADD
3627: PUSH
3628: LD_EXP 56
3632: PUSH
3633: LD_VAR 0 4
3637: PUSH
3638: LD_VAR 0 5
3642: ADD
3643: DIFF
3644: ADD
3645: ST_TO_ADDR
// Wait ( 0 0$1.0 ) ;
3646: LD_INT 35
3648: PPUSH
3649: CALL_OW 67
// PlaceHumanInUnit ( used [ 1 ] , Car1 ) ;
3653: LD_EXP 56
3657: PUSH
3658: LD_INT 1
3660: ARRAY
3661: PPUSH
3662: LD_EXP 24
3666: PPUSH
3667: CALL_OW 52
// PlaceHumanInUnit ( used [ 2 ] , Car2 ) ;
3671: LD_EXP 56
3675: PUSH
3676: LD_INT 2
3678: ARRAY
3679: PPUSH
3680: LD_EXP 25
3684: PPUSH
3685: CALL_OW 52
// PlaceHumanInUnit ( used [ 3 ] , Car3 ) ;
3689: LD_EXP 56
3693: PUSH
3694: LD_INT 3
3696: ARRAY
3697: PPUSH
3698: LD_EXP 26
3702: PPUSH
3703: CALL_OW 52
// PlaceUnitXYR ( Car1 , startx , starty , startd , false ) ;
3707: LD_EXP 24
3711: PPUSH
3712: LD_LOC 1
3716: PPUSH
3717: LD_LOC 2
3721: PPUSH
3722: LD_LOC 3
3726: PPUSH
3727: LD_INT 0
3729: PPUSH
3730: CALL_OW 50
// PlaceUnitXYR ( Car2 , startx , starty , startd , false ) ;
3734: LD_EXP 25
3738: PPUSH
3739: LD_LOC 1
3743: PPUSH
3744: LD_LOC 2
3748: PPUSH
3749: LD_LOC 3
3753: PPUSH
3754: LD_INT 0
3756: PPUSH
3757: CALL_OW 50
// PlaceUnitXYR ( Car3 , startx , starty , startd , false ) ;
3761: LD_EXP 26
3765: PPUSH
3766: LD_LOC 1
3770: PPUSH
3771: LD_LOC 2
3775: PPUSH
3776: LD_LOC 3
3780: PPUSH
3781: LD_INT 0
3783: PPUSH
3784: CALL_OW 50
// for i := 4 to used do
3788: LD_ADDR_VAR 0 3
3792: PUSH
3793: DOUBLE
3794: LD_INT 4
3796: DEC
3797: ST_TO_ADDR
3798: LD_EXP 56
3802: PUSH
3803: FOR_TO
3804: IFFALSE 3841
// PlaceUnitXYR ( used [ i ] , startx , starty , startd , false ) ;
3806: LD_EXP 56
3810: PUSH
3811: LD_VAR 0 3
3815: ARRAY
3816: PPUSH
3817: LD_LOC 1
3821: PPUSH
3822: LD_LOC 2
3826: PPUSH
3827: LD_LOC 3
3831: PPUSH
3832: LD_INT 0
3834: PPUSH
3835: CALL_OW 50
3839: GO 3803
3841: POP
3842: POP
// tvoji_lidi := used ;
3843: LD_ADDR_EXP 47
3847: PUSH
3848: LD_EXP 56
3852: ST_TO_ADDR
// Wait ( 0 0$1 ) ;
3853: LD_INT 35
3855: PPUSH
3856: CALL_OW 67
// CenterNowOnXY ( startx , starty ) ;
3860: LD_LOC 1
3864: PPUSH
3865: LD_LOC 2
3869: PPUSH
3870: CALL_OW 86
// Say ( JMM , D1d-JMM-1a ) ;
3874: LD_EXP 10
3878: PPUSH
3879: LD_STRING D1d-JMM-1a
3881: PPUSH
3882: CALL_OW 88
// SayRadio ( Har , D1d-Har-1 ) ;
3886: LD_EXP 12
3890: PPUSH
3891: LD_STRING D1d-Har-1
3893: PPUSH
3894: CALL_OW 94
// InGameOff ;
3898: CALL_OW 9
// SaveForQuickRestart ;
3902: CALL_OW 22
// ChangeMissionObjectives ( M1 ) ;
3906: LD_STRING M1
3908: PPUSH
3909: CALL_OW 337
// Wait ( 0 0$1.0 ) ;
3913: LD_INT 35
3915: PPUSH
3916: CALL_OW 67
// TalkOn ;
3920: CALL 14786 0 0
// if Say ( JMM , D2-JMM-1 ) then
3924: LD_EXP 10
3928: PPUSH
3929: LD_STRING D2-JMM-1
3931: PPUSH
3932: CALL_OW 88
3936: IFFALSE 3992
// if Say ( Glad , D2-Glad-1 ) then
3938: LD_EXP 11
3942: PPUSH
3943: LD_STRING D2-Glad-1
3945: PPUSH
3946: CALL_OW 88
3950: IFFALSE 3992
// if Say ( JMM , D2-JMM-2 ) then
3952: LD_EXP 10
3956: PPUSH
3957: LD_STRING D2-JMM-2
3959: PPUSH
3960: CALL_OW 88
3964: IFFALSE 3992
// if Say ( Glad , D2-Glad-2 ) then
3966: LD_EXP 11
3970: PPUSH
3971: LD_STRING D2-Glad-2
3973: PPUSH
3974: CALL_OW 88
3978: IFFALSE 3992
// Say ( JMM , D2-JMM-3 ) ;
3980: LD_EXP 10
3984: PPUSH
3985: LD_STRING D2-JMM-3
3987: PPUSH
3988: CALL_OW 88
// TalkOff ;
3992: CALL 14794 0 0
// end ;
3996: LD_VAR 0 1
4000: RET
// every 0 0$10 trigger denis_can_come and laboratore do var a , mytick ;
4001: LD_EXP 45
4005: PUSH
4006: LD_EXP 62
4010: AND
4011: IFFALSE 4391
4013: GO 4015
4015: DISABLE
4016: LD_INT 0
4018: PPUSH
4019: PPUSH
// begin mytick := tick + 0 0$55 ;
4020: LD_ADDR_VAR 0 2
4024: PUSH
4025: LD_OWVAR 1
4029: PUSH
4030: LD_INT 1925
4032: PLUS
4033: ST_TO_ADDR
// while mytick > tick and GetTechProgress ( tech_ApePsych , you ) < 40 do
4034: LD_VAR 0 2
4038: PUSH
4039: LD_OWVAR 1
4043: GREATER
4044: PUSH
4045: LD_INT 2
4047: PPUSH
4048: LD_EXP 1
4052: PPUSH
4053: CALL_OW 326
4057: PUSH
4058: LD_INT 40
4060: LESS
4061: AND
4062: IFFALSE 4073
// wait ( 0 0$1 ) ;
4064: LD_INT 35
4066: PPUSH
4067: CALL_OW 67
4071: GO 4034
// SetSide ( Denis , you2 ) ;
4073: LD_EXP 20
4077: PPUSH
4078: LD_EXP 2
4082: PPUSH
4083: CALL_OW 235
// PlaceUnitXYR ( Denis , 20 , 35 , 5 , false ) ;
4087: LD_EXP 20
4091: PPUSH
4092: LD_INT 20
4094: PPUSH
4095: LD_INT 35
4097: PPUSH
4098: LD_INT 5
4100: PPUSH
4101: LD_INT 0
4103: PPUSH
4104: CALL_OW 50
// Wait ( 0 0$2 ) ;
4108: LD_INT 70
4110: PPUSH
4111: CALL_OW 67
// Den := Denis ;
4115: LD_ADDR_EXP 13
4119: PUSH
4120: LD_EXP 20
4124: ST_TO_ADDR
// DialogueOn ;
4125: CALL_OW 6
// CenterOnUnits ( Den ) ;
4129: LD_EXP 13
4133: PPUSH
4134: CALL_OW 85
// if Say ( Den , DD-Den-1 ) then
4138: LD_EXP 13
4142: PPUSH
4143: LD_STRING DD-Den-1
4145: PPUSH
4146: CALL_OW 88
4150: IFFALSE 4178
// if Say ( JMM , DD-JMM-1 ) then
4152: LD_EXP 10
4156: PPUSH
4157: LD_STRING DD-JMM-1
4159: PPUSH
4160: CALL_OW 88
4164: IFFALSE 4178
// Say ( Den , DD-Den-2 ) ;
4166: LD_EXP 13
4170: PPUSH
4171: LD_STRING DD-Den-2
4173: PPUSH
4174: CALL_OW 88
// DialogueOff ;
4178: CALL_OW 7
// if laboratore then
4182: LD_EXP 62
4186: IFFALSE 4204
// a := laboratore [ 1 ] else
4188: LD_ADDR_VAR 0 1
4192: PUSH
4193: LD_EXP 62
4197: PUSH
4198: LD_INT 1
4200: ARRAY
4201: ST_TO_ADDR
4202: GO 4218
// a := budovy [ 1 ] ;
4204: LD_ADDR_VAR 0 1
4208: PUSH
4209: LD_EXP 63
4213: PUSH
4214: LD_INT 1
4216: ARRAY
4217: ST_TO_ADDR
// ComMoveUnit ( Den , a ) ;
4218: LD_EXP 13
4222: PPUSH
4223: LD_VAR 0 1
4227: PPUSH
4228: CALL_OW 112
// Say ( Den , DD-Den-2a ) ;
4232: LD_EXP 13
4236: PPUSH
4237: LD_STRING DD-Den-2a
4239: PPUSH
4240: CALL_OW 88
// mytick := tick + 0 0$20 ;
4244: LD_ADDR_VAR 0 2
4248: PUSH
4249: LD_OWVAR 1
4253: PUSH
4254: LD_INT 700
4256: PLUS
4257: ST_TO_ADDR
// while GetDistUnits ( den , a ) > 4 and IsLive ( a ) and mytick > tick do
4258: LD_EXP 13
4262: PPUSH
4263: LD_VAR 0 1
4267: PPUSH
4268: CALL_OW 296
4272: PUSH
4273: LD_INT 4
4275: GREATER
4276: PUSH
4277: LD_VAR 0 1
4281: PPUSH
4282: CALL_OW 300
4286: AND
4287: PUSH
4288: LD_VAR 0 2
4292: PUSH
4293: LD_OWVAR 1
4297: GREATER
4298: AND
4299: IFFALSE 4310
// wait ( 0 0$0.6 ) ;
4301: LD_INT 21
4303: PPUSH
4304: CALL_OW 67
4308: GO 4258
// SetSide ( Den , you ) ;
4310: LD_EXP 13
4314: PPUSH
4315: LD_EXP 1
4319: PPUSH
4320: CALL_OW 235
// tvoji_lidi := tvoji_lidi union Den ;
4324: LD_ADDR_EXP 47
4328: PUSH
4329: LD_EXP 47
4333: PUSH
4334: LD_EXP 13
4338: UNION
4339: ST_TO_ADDR
// if laboratore then
4340: LD_EXP 62
4344: IFFALSE 4391
// begin ComEnterUnit ( Den , a ) ;
4346: LD_EXP 13
4350: PPUSH
4351: LD_VAR 0 1
4355: PPUSH
4356: CALL_OW 120
// AddComChangeProfession ( Den , class_scientistic ) ;
4360: LD_EXP 13
4364: PPUSH
4365: LD_INT 4
4367: PPUSH
4368: CALL_OW 183
// Wait ( 0 0$2 ) ;
4372: LD_INT 70
4374: PPUSH
4375: CALL_OW 67
// Say ( Den , DD-Den-2b ) ;
4379: LD_EXP 13
4383: PPUSH
4384: LD_STRING DD-Den-2b
4386: PPUSH
4387: CALL_OW 88
// end ; end ;
4391: PPOPN 2
4393: END
// on ResearchComplete ( tech , lab ) do var qr ;
4394: LD_INT 0
4396: PPUSH
// begin if ( GetSide ( lab ) = you ) then
4397: LD_VAR 0 2
4401: PPUSH
4402: CALL_OW 255
4406: PUSH
4407: LD_EXP 1
4411: EQUAL
4412: IFFALSE 4714
// begin wait ( 0 0$1 ) ;
4414: LD_INT 35
4416: PPUSH
4417: CALL_OW 67
// if tech = tech_ApeLang then
4421: LD_VAR 0 1
4425: PUSH
4426: LD_INT 1
4428: EQUAL
4429: IFFALSE 4520
// begin zasilka_muze := true ;
4431: LD_ADDR_EXP 43
4435: PUSH
4436: LD_INT 1
4438: ST_TO_ADDR
// if IsLive ( Glad ) then
4439: LD_EXP 11
4443: PPUSH
4444: CALL_OW 300
4448: IFFALSE 4513
// begin Wait ( 0 0$1 ) ;
4450: LD_INT 35
4452: PPUSH
4453: CALL_OW 67
// DialogueOn ;
4457: CALL_OW 6
// Say ( Glad , D3-Glad-1 ) ;
4461: LD_EXP 11
4465: PPUSH
4466: LD_STRING D3-Glad-1
4468: PPUSH
4469: CALL_OW 88
// Say ( JMM , D3-JMM-1 ) ;
4473: LD_EXP 10
4477: PPUSH
4478: LD_STRING D3-JMM-1
4480: PPUSH
4481: CALL_OW 88
// Say ( Glad , D3-Glad-2 ) ;
4485: LD_EXP 11
4489: PPUSH
4490: LD_STRING D3-Glad-2
4492: PPUSH
4493: CALL_OW 88
// Say ( JMM , D3-JMM-2 ) ;
4497: LD_EXP 10
4501: PPUSH
4502: LD_STRING D3-JMM-2
4504: PPUSH
4505: CALL_OW 88
// DialogueOff ;
4509: CALL_OW 7
// end ; MyHint ( ApemenTaming ) ;
4513: LD_STRING ApemenTaming
4515: PPUSH
4516: CALL 15134 0 1
// end ; if tech = tech_ApePsych then
4520: LD_VAR 0 1
4524: PUSH
4525: LD_INT 2
4527: EQUAL
4528: IFFALSE 4675
// begin Wait ( 0 0$1 ) ;
4530: LD_INT 35
4532: PPUSH
4533: CALL_OW 67
// while opic <= 0 do
4537: LD_EXP 40
4541: PUSH
4542: LD_INT 0
4544: LESSEQUAL
4545: IFFALSE 4556
// wait ( 0 0$2 ) ;
4547: LD_INT 70
4549: PPUSH
4550: CALL_OW 67
4554: GO 4537
// DialogueOn ;
4556: CALL_OW 6
// if Frank then
4560: LD_EXP 15
4564: IFFALSE 4580
// Say ( Frank , D8a-Frank-1 ) else
4566: LD_EXP 15
4570: PPUSH
4571: LD_STRING D8a-Frank-1
4573: PPUSH
4574: CALL_OW 88
4578: GO 4606
// SayAny ( not_char , D8a-Sol1-1 , you , sex_male , 0 , 0 ) ;
4580: LD_EXP 48
4584: PPUSH
4585: LD_STRING D8a-Sol1-1
4587: PPUSH
4588: LD_EXP 1
4592: PPUSH
4593: LD_INT 1
4595: PPUSH
4596: LD_INT 0
4598: PPUSH
4599: LD_INT 0
4601: PPUSH
4602: CALL 14860 0 6
// if Den then
4606: LD_EXP 13
4610: IFFALSE 4626
// Say ( Den , D8a-Den-1 ) else
4612: LD_EXP 13
4616: PPUSH
4617: LD_STRING D8a-Den-1
4619: PPUSH
4620: CALL_OW 88
4624: GO 4652
// SayAny ( not_char , D8a-Sci1-1 , you , sex_male , class_scientistic , 0 ) ;
4626: LD_EXP 48
4630: PPUSH
4631: LD_STRING D8a-Sci1-1
4633: PPUSH
4634: LD_EXP 1
4638: PPUSH
4639: LD_INT 1
4641: PPUSH
4642: LD_INT 4
4644: PPUSH
4645: LD_INT 0
4647: PPUSH
4648: CALL 14860 0 6
// Say ( JMM , D8a-JMM-1 ) ;
4652: LD_EXP 10
4656: PPUSH
4657: LD_STRING D8a-JMM-1
4659: PPUSH
4660: CALL_OW 88
// DialogueOff ;
4664: CALL_OW 7
// MyHint ( ApemenPsychology ) ;
4668: LD_STRING ApemenPsychology
4670: PPUSH
4671: CALL 15134 0 1
// end ; if tech = tech_Radar then
4675: LD_VAR 0 1
4679: PUSH
4680: LD_INT 6
4682: EQUAL
4683: IFFALSE 4714
// begin ChangeMissionObjectives ( M2a ) ;
4685: LD_STRING M2a
4687: PPUSH
4688: CALL_OW 337
// SetRestrict ( b_ext_radar , you , state_enabled ) ;
4692: LD_INT 20
4694: PPUSH
4695: LD_EXP 1
4699: PPUSH
4700: LD_INT 1
4702: PPUSH
4703: CALL_OW 324
// MyHint ( Extensions ) ;
4707: LD_STRING Extensions
4709: PPUSH
4710: CALL 15134 0 1
// end ; end ; end ;
4714: PPOPN 3
4716: END
// every 0 0$5 trigger FilterAllUnits ( [ f_class , class_apeman_engineer ] ) >= 5 do var ape_eng ;
4717: LD_INT 25
4719: PUSH
4720: LD_INT 16
4722: PUSH
4723: EMPTY
4724: LIST
4725: LIST
4726: PPUSH
4727: CALL_OW 69
4731: PUSH
4732: LD_INT 5
4734: GREATEREQUAL
4735: IFFALSE 4788
4737: GO 4739
4739: DISABLE
4740: LD_INT 0
4742: PPUSH
// begin ape_eng := FilterAllUnits ( [ f_class , class_apeman_engineer ] ) ;
4743: LD_ADDR_VAR 0 1
4747: PUSH
4748: LD_INT 25
4750: PUSH
4751: LD_INT 16
4753: PUSH
4754: EMPTY
4755: LIST
4756: LIST
4757: PPUSH
4758: CALL_OW 69
4762: ST_TO_ADDR
// if ape_eng >= 5 then
4763: LD_VAR 0 1
4767: PUSH
4768: LD_INT 5
4770: GREATEREQUAL
4771: IFFALSE 4788
// begin cil_mit_5_ape_eng_splnen := true ;
4773: LD_ADDR_EXP 42
4777: PUSH
4778: LD_INT 1
4780: ST_TO_ADDR
// ChangeMissionObjectives ( M1b ) ;
4781: LD_STRING M1b
4783: PPUSH
4784: CALL_OW 337
// end ; end ;
4788: PPOPN 1
4790: END
// every 0 0$5 trigger FilterAllUnits ( [ f_class , class_apeman_engineer ] ) do var ape_eng ;
4791: LD_INT 25
4793: PUSH
4794: LD_INT 16
4796: PUSH
4797: EMPTY
4798: LIST
4799: LIST
4800: PPUSH
4801: CALL_OW 69
4805: IFFALSE 4854
4807: GO 4809
4809: DISABLE
4810: LD_INT 0
4812: PPUSH
// begin ape_eng := FilterAllUnits ( [ f_class , class_apeman_engineer ] ) ;
4813: LD_ADDR_VAR 0 1
4817: PUSH
4818: LD_INT 25
4820: PUSH
4821: LD_INT 16
4823: PUSH
4824: EMPTY
4825: LIST
4826: LIST
4827: PPUSH
4828: CALL_OW 69
4832: ST_TO_ADDR
// if ape_eng then
4833: LD_VAR 0 1
4837: IFFALSE 4854
// begin cil_mit_1_ape_eng_splnen := true ;
4839: LD_ADDR_EXP 41
4843: PUSH
4844: LD_INT 1
4846: ST_TO_ADDR
// ChangeMissionObjectives ( M1a ) ;
4847: LD_STRING M1a
4849: PPUSH
4850: CALL_OW 337
// end ; end ;
4854: PPOPN 1
4856: END
// every 0 0$3 trigger FilterAllUnits ( [ f_weapon , us_radar ] ) or ma_radar do
4857: LD_INT 34
4859: PUSH
4860: LD_INT 11
4862: PUSH
4863: EMPTY
4864: LIST
4865: LIST
4866: PPUSH
4867: CALL_OW 69
4871: PUSH
4872: CALL 4898 0 0
4876: OR
4877: IFFALSE 4897
4879: GO 4881
4881: DISABLE
// begin ChangeMissionObjectives ( M2b ) ;
4882: LD_STRING M2b
4884: PPUSH
4885: CALL_OW 337
// RadarBuild := true ;
4889: LD_ADDR_EXP 46
4893: PUSH
4894: LD_INT 1
4896: ST_TO_ADDR
// end ;
4897: END
// function ma_radar ; var i ; begin
4898: LD_INT 0
4900: PPUSH
4901: PPUSH
// result := false ;
4902: LD_ADDR_VAR 0 1
4906: PUSH
4907: LD_INT 0
4909: ST_TO_ADDR
// for i in FilterAllUnits ( [ f_type , unit_building ] ) do
4910: LD_ADDR_VAR 0 2
4914: PUSH
4915: LD_INT 21
4917: PUSH
4918: LD_INT 3
4920: PUSH
4921: EMPTY
4922: LIST
4923: LIST
4924: PPUSH
4925: CALL_OW 69
4929: PUSH
4930: FOR_IN
4931: IFFALSE 4960
// begin if GetBWeapon ( i ) = us_radar then
4933: LD_VAR 0 2
4937: PPUSH
4938: CALL_OW 269
4942: PUSH
4943: LD_INT 11
4945: EQUAL
4946: IFFALSE 4958
// begin result := true ;
4948: LD_ADDR_VAR 0 1
4952: PUSH
4953: LD_INT 1
4955: ST_TO_ADDR
// break ;
4956: GO 4960
// end ; end ;
4958: GO 4930
4960: POP
4961: POP
// end ;
4962: LD_VAR 0 1
4966: RET
// every 7 7$0 do var hex , depot ;
4967: GO 4969
4969: DISABLE
4970: LD_INT 0
4972: PPUSH
4973: PPUSH
// begin depot := FilterAllUnits ( [ f_or , [ f_btype , b_depot ] , [ [ f_btype , b_warehouse ] ] ] ) ;
4974: LD_ADDR_VAR 0 2
4978: PUSH
4979: LD_INT 2
4981: PUSH
4982: LD_INT 30
4984: PUSH
4985: LD_INT 0
4987: PUSH
4988: EMPTY
4989: LIST
4990: LIST
4991: PUSH
4992: LD_INT 30
4994: PUSH
4995: LD_INT 1
4997: PUSH
4998: EMPTY
4999: LIST
5000: LIST
5001: PUSH
5002: EMPTY
5003: LIST
5004: PUSH
5005: EMPTY
5006: LIST
5007: LIST
5008: LIST
5009: PPUSH
5010: CALL_OW 69
5014: ST_TO_ADDR
// if depot then
5015: LD_VAR 0 2
5019: IFFALSE 5037
// depot := depot [ 1 ] else
5021: LD_ADDR_VAR 0 2
5025: PUSH
5026: LD_VAR 0 2
5030: PUSH
5031: LD_INT 1
5033: ARRAY
5034: ST_TO_ADDR
5035: GO 5047
// depot := JMM ;
5037: LD_ADDR_VAR 0 2
5041: PUSH
5042: LD_EXP 10
5046: ST_TO_ADDR
// repeat hex := RandHex ( false ) ;
5047: LD_ADDR_VAR 0 1
5051: PUSH
5052: LD_INT 0
5054: PPUSH
5055: CALL_OW 15
5059: ST_TO_ADDR
// until GetDistUnitXY ( depot , hex [ 1 ] , hex [ 2 ] ) > 10 and GetDistUnitXY ( depot , hex [ 1 ] , hex [ 2 ] ) < 20 ;
5060: LD_VAR 0 2
5064: PPUSH
5065: LD_VAR 0 1
5069: PUSH
5070: LD_INT 1
5072: ARRAY
5073: PPUSH
5074: LD_VAR 0 1
5078: PUSH
5079: LD_INT 2
5081: ARRAY
5082: PPUSH
5083: CALL_OW 297
5087: PUSH
5088: LD_INT 10
5090: GREATER
5091: PUSH
5092: LD_VAR 0 2
5096: PPUSH
5097: LD_VAR 0 1
5101: PUSH
5102: LD_INT 1
5104: ARRAY
5105: PPUSH
5106: LD_VAR 0 1
5110: PUSH
5111: LD_INT 2
5113: ARRAY
5114: PPUSH
5115: CALL_OW 297
5119: PUSH
5120: LD_INT 20
5122: LESS
5123: AND
5124: IFFALSE 5047
// CreateCratesXYR ( 5 , hex [ 1 ] , hex [ 2 ] , 5 , true ) ;
5126: LD_INT 5
5128: PPUSH
5129: LD_VAR 0 1
5133: PUSH
5134: LD_INT 1
5136: ARRAY
5137: PPUSH
5138: LD_VAR 0 1
5142: PUSH
5143: LD_INT 2
5145: ARRAY
5146: PPUSH
5147: LD_INT 5
5149: PPUSH
5150: LD_INT 1
5152: PPUSH
5153: CALL_OW 56
// mat_crates := mat_crates + 1 ;
5157: LD_ADDR_EXP 54
5161: PUSH
5162: LD_EXP 54
5166: PUSH
5167: LD_INT 1
5169: PLUS
5170: ST_TO_ADDR
// end ;
5171: PPOPN 2
5173: END
// every 0 0$10 trigger zasilka_muze do var hex , depot ;
5174: LD_EXP 43
5178: IFFALSE 5395
5180: GO 5182
5182: DISABLE
5183: LD_INT 0
5185: PPUSH
5186: PPUSH
// begin wait ( 10 10$0 ) ;
5187: LD_INT 21000
5189: PPUSH
5190: CALL_OW 67
// depot := FilterAllUnits ( [ f_or , [ f_btype , b_depot ] , [ [ f_btype , b_warehouse ] ] ] ) [ 1 ] ;
5194: LD_ADDR_VAR 0 2
5198: PUSH
5199: LD_INT 2
5201: PUSH
5202: LD_INT 30
5204: PUSH
5205: LD_INT 0
5207: PUSH
5208: EMPTY
5209: LIST
5210: LIST
5211: PUSH
5212: LD_INT 30
5214: PUSH
5215: LD_INT 1
5217: PUSH
5218: EMPTY
5219: LIST
5220: LIST
5221: PUSH
5222: EMPTY
5223: LIST
5224: PUSH
5225: EMPTY
5226: LIST
5227: LIST
5228: LIST
5229: PPUSH
5230: CALL_OW 69
5234: PUSH
5235: LD_INT 1
5237: ARRAY
5238: ST_TO_ADDR
// if depot then
5239: LD_VAR 0 2
5243: IFFALSE 5261
// depot := depot [ 1 ] else
5245: LD_ADDR_VAR 0 2
5249: PUSH
5250: LD_VAR 0 2
5254: PUSH
5255: LD_INT 1
5257: ARRAY
5258: ST_TO_ADDR
5259: GO 5271
// depot := JMM ;
5261: LD_ADDR_VAR 0 2
5265: PUSH
5266: LD_EXP 10
5270: ST_TO_ADDR
// repeat hex := RandHex ( false ) ;
5271: LD_ADDR_VAR 0 1
5275: PUSH
5276: LD_INT 0
5278: PPUSH
5279: CALL_OW 15
5283: ST_TO_ADDR
// until GetDistUnitXY ( depot , hex [ 1 ] , hex [ 2 ] ) > 10 and GetDistUnitXY ( depot , hex [ 1 ] , hex [ 2 ] ) < 20 ;
5284: LD_VAR 0 2
5288: PPUSH
5289: LD_VAR 0 1
5293: PUSH
5294: LD_INT 1
5296: ARRAY
5297: PPUSH
5298: LD_VAR 0 1
5302: PUSH
5303: LD_INT 2
5305: ARRAY
5306: PPUSH
5307: CALL_OW 297
5311: PUSH
5312: LD_INT 10
5314: GREATER
5315: PUSH
5316: LD_VAR 0 2
5320: PPUSH
5321: LD_VAR 0 1
5325: PUSH
5326: LD_INT 1
5328: ARRAY
5329: PPUSH
5330: LD_VAR 0 1
5334: PUSH
5335: LD_INT 2
5337: ARRAY
5338: PPUSH
5339: CALL_OW 297
5343: PUSH
5344: LD_INT 20
5346: LESS
5347: AND
5348: IFFALSE 5271
// CreateCratesXYR ( 5 , hex [ 1 ] , hex [ 2 ] , 5 , true ) ;
5350: LD_INT 5
5352: PPUSH
5353: LD_VAR 0 1
5357: PUSH
5358: LD_INT 1
5360: ARRAY
5361: PPUSH
5362: LD_VAR 0 1
5366: PUSH
5367: LD_INT 2
5369: ARRAY
5370: PPUSH
5371: LD_INT 5
5373: PPUSH
5374: LD_INT 1
5376: PPUSH
5377: CALL_OW 56
// mat_crates := mat_crates + 1 ;
5381: LD_ADDR_EXP 54
5385: PUSH
5386: LD_EXP 54
5390: PUSH
5391: LD_INT 1
5393: PLUS
5394: ST_TO_ADDR
// end ;
5395: PPOPN 2
5397: END
// every 0 0$1 trigger zasilka_muze and Den do var cekani , budova , x , y , mytick ;
5398: LD_EXP 43
5402: PUSH
5403: LD_EXP 13
5407: AND
5408: IFFALSE 5858
5410: GO 5412
5412: DISABLE
5413: LD_INT 0
5415: PPUSH
5416: PPUSH
5417: PPUSH
5418: PPUSH
5419: PPUSH
// begin cekani := [ 1 1$30 , 1 1$50 , 2 2$10 , 2 2$30 ] [ rand ( 1 , 4 ) ] ;
5420: LD_ADDR_VAR 0 1
5424: PUSH
5425: LD_INT 3150
5427: PUSH
5428: LD_INT 3850
5430: PUSH
5431: LD_INT 4550
5433: PUSH
5434: LD_INT 5250
5436: PUSH
5437: EMPTY
5438: LIST
5439: LIST
5440: LIST
5441: LIST
5442: PUSH
5443: LD_INT 1
5445: PPUSH
5446: LD_INT 4
5448: PPUSH
5449: CALL_OW 12
5453: ARRAY
5454: ST_TO_ADDR
// mytick := tick + cekani ;
5455: LD_ADDR_VAR 0 5
5459: PUSH
5460: LD_OWVAR 1
5464: PUSH
5465: LD_VAR 0 1
5469: PLUS
5470: ST_TO_ADDR
// while tick < mytick and GetTechProgress ( tech_ApePsych , you ) < 70 do
5471: LD_OWVAR 1
5475: PUSH
5476: LD_VAR 0 5
5480: LESS
5481: PUSH
5482: LD_INT 2
5484: PPUSH
5485: LD_EXP 1
5489: PPUSH
5490: CALL_OW 326
5494: PUSH
5495: LD_INT 70
5497: LESS
5498: AND
5499: IFFALSE 5510
// Wait ( 0 0$1 ) ;
5501: LD_INT 35
5503: PPUSH
5504: CALL_OW 67
5508: GO 5471
// budova := FilterAllUnits ( [ f_btype , b_depot ] ) ;
5510: LD_ADDR_VAR 0 2
5514: PUSH
5515: LD_INT 30
5517: PUSH
5518: LD_INT 0
5520: PUSH
5521: EMPTY
5522: LIST
5523: LIST
5524: PPUSH
5525: CALL_OW 69
5529: ST_TO_ADDR
// if budova then
5530: LD_VAR 0 2
5534: IFFALSE 5582
// begin budova := budova [ 1 ] ;
5536: LD_ADDR_VAR 0 2
5540: PUSH
5541: LD_VAR 0 2
5545: PUSH
5546: LD_INT 1
5548: ARRAY
5549: ST_TO_ADDR
// x := GetX ( budova ) ;
5550: LD_ADDR_VAR 0 3
5554: PUSH
5555: LD_VAR 0 2
5559: PPUSH
5560: CALL_OW 250
5564: ST_TO_ADDR
// y := GetY ( budova ) ;
5565: LD_ADDR_VAR 0 4
5569: PUSH
5570: LD_VAR 0 2
5574: PPUSH
5575: CALL_OW 251
5579: ST_TO_ADDR
// end else
5580: GO 5598
// begin x := 41 ;
5582: LD_ADDR_VAR 0 3
5586: PUSH
5587: LD_INT 41
5589: ST_TO_ADDR
// y := 24 ;
5590: LD_ADDR_VAR 0 4
5594: PUSH
5595: LD_INT 24
5597: ST_TO_ADDR
// end ; CreateCratesXYR ( 5 , x , y , 10 , true ) ;
5598: LD_INT 5
5600: PPUSH
5601: LD_VAR 0 3
5605: PPUSH
5606: LD_VAR 0 4
5610: PPUSH
5611: LD_INT 10
5613: PPUSH
5614: LD_INT 1
5616: PPUSH
5617: CALL_OW 56
// mat_crates := mat_crates + 1 ;
5621: LD_ADDR_EXP 54
5625: PUSH
5626: LD_EXP 54
5630: PUSH
5631: LD_INT 1
5633: PLUS
5634: ST_TO_ADDR
// Wait ( 0 0$6 ) ;
5635: LD_INT 210
5637: PPUSH
5638: CALL_OW 67
// DialogueOn ;
5642: CALL_OW 6
// Say ( JMM , D4-JMM-1 ) ;
5646: LD_EXP 10
5650: PPUSH
5651: LD_STRING D4-JMM-1
5653: PPUSH
5654: CALL_OW 88
// if Say ( Den , D4-Den-1 ) then
5658: LD_EXP 13
5662: PPUSH
5663: LD_STRING D4-Den-1
5665: PPUSH
5666: CALL_OW 88
5670: IFFALSE 5698
// if Say ( JMM , D4-JMM-2 ) then
5672: LD_EXP 10
5676: PPUSH
5677: LD_STRING D4-JMM-2
5679: PPUSH
5680: CALL_OW 88
5684: IFFALSE 5698
// Say ( Den , D4-Den-2 ) ;
5686: LD_EXP 13
5690: PPUSH
5691: LD_STRING D4-Den-2
5693: PPUSH
5694: CALL_OW 88
// DialogueOff ;
5698: CALL_OW 7
// ChangeMissionObjectives ( M2 ) ;
5702: LD_STRING M2
5704: PPUSH
5705: CALL_OW 337
// SetTech ( tech_Radar , you , state_enabled ) ;
5709: LD_INT 6
5711: PPUSH
5712: LD_EXP 1
5716: PPUSH
5717: LD_INT 1
5719: PPUSH
5720: CALL_OW 322
// SetRestrict ( b_lab_half , you , state_enabled ) ;
5724: LD_INT 7
5726: PPUSH
5727: LD_EXP 1
5731: PPUSH
5732: LD_INT 1
5734: PPUSH
5735: CALL_OW 324
// SetRestrict ( b_lab_opto , you , state_enabled ) ;
5739: LD_INT 15
5741: PPUSH
5742: LD_EXP 1
5746: PPUSH
5747: LD_INT 1
5749: PPUSH
5750: CALL_OW 324
// zasilka_landed := true ;
5754: LD_ADDR_EXP 44
5758: PUSH
5759: LD_INT 1
5761: ST_TO_ADDR
// if difficulty <= 2 then
5762: LD_OWVAR 67
5766: PUSH
5767: LD_INT 2
5769: LESSEQUAL
5770: IFFALSE 5858
// begin wait ( Rand ( 0 0$50 , 1 1$30 ) ) ;
5772: LD_INT 1750
5774: PPUSH
5775: LD_INT 3150
5777: PPUSH
5778: CALL_OW 12
5782: PPUSH
5783: CALL_OW 67
// CreateCratesXYR ( 5 , x , y , 10 , true ) ;
5787: LD_INT 5
5789: PPUSH
5790: LD_VAR 0 3
5794: PPUSH
5795: LD_VAR 0 4
5799: PPUSH
5800: LD_INT 10
5802: PPUSH
5803: LD_INT 1
5805: PPUSH
5806: CALL_OW 56
// if difficulty <= 1 then
5810: LD_OWVAR 67
5814: PUSH
5815: LD_INT 1
5817: LESSEQUAL
5818: IFFALSE 5858
// begin wait ( Rand ( 0 0$30 , 1 1$0 ) ) ;
5820: LD_INT 1050
5822: PPUSH
5823: LD_INT 2100
5825: PPUSH
5826: CALL_OW 12
5830: PPUSH
5831: CALL_OW 67
// CreateCratesXYR ( 5 , x , y , 10 , true ) ;
5835: LD_INT 5
5837: PPUSH
5838: LD_VAR 0 3
5842: PPUSH
5843: LD_VAR 0 4
5847: PPUSH
5848: LD_INT 10
5850: PPUSH
5851: LD_INT 1
5853: PPUSH
5854: CALL_OW 56
// end ; end ; end ;
5858: PPOPN 5
5860: END
// every 0 0$3.0 trigger attacking and see_any ( you , oma ) do var dia1 , kdo1 , kdo2 , kdo3 , cvidi ;
5861: LD_EXP 38
5865: PUSH
5866: LD_EXP 1
5870: PPUSH
5871: LD_EXP 7
5875: PPUSH
5876: CALL 13837 0 2
5880: AND
5881: IFFALSE 6432
5883: GO 5885
5885: DISABLE
5886: LD_INT 0
5888: PPUSH
5889: PPUSH
5890: PPUSH
5891: PPUSH
5892: PPUSH
// begin while cvidi < 5 do
5893: LD_VAR 0 5
5897: PUSH
5898: LD_INT 5
5900: LESS
5901: IFFALSE 5944
// begin while see_any ( you , oma ) do
5903: LD_EXP 1
5907: PPUSH
5908: LD_EXP 7
5912: PPUSH
5913: CALL 13837 0 2
5917: IFFALSE 5942
// begin Wait ( 0 0$1 ) ;
5919: LD_INT 35
5921: PPUSH
5922: CALL_OW 67
// cvidi := cvidi + 1 ;
5926: LD_ADDR_VAR 0 5
5930: PUSH
5931: LD_VAR 0 5
5935: PUSH
5936: LD_INT 1
5938: PLUS
5939: ST_TO_ADDR
// end ;
5940: GO 5903
// end ;
5942: GO 5893
// for dia1 := 1 to 5 do
5944: LD_ADDR_VAR 0 1
5948: PUSH
5949: DOUBLE
5950: LD_INT 1
5952: DEC
5953: ST_TO_ADDR
5954: LD_INT 5
5956: PUSH
5957: FOR_TO
5958: IFFALSE 5994
// begin while see_any ( you , oma ) do
5960: LD_EXP 1
5964: PPUSH
5965: LD_EXP 7
5969: PPUSH
5970: CALL 13837 0 2
5974: IFFALSE 5985
// Wait ( 0 0$1 ) ;
5976: LD_INT 35
5978: PPUSH
5979: CALL_OW 67
5983: GO 5960
// Wait ( 0 0$1 ) ;
5985: LD_INT 35
5987: PPUSH
5988: CALL_OW 67
// end ;
5992: GO 5957
5994: POP
5995: POP
// if IsLive ( Lisa ) then
5996: LD_EXP 14
6000: PPUSH
6001: CALL_OW 300
6005: IFFALSE 6124
// begin kdo1 := WhoSayAny ( not_char , you , sex_male , 0 , 0 ) ;
6007: LD_ADDR_VAR 0 2
6011: PUSH
6012: LD_EXP 48
6016: PPUSH
6017: LD_EXP 1
6021: PPUSH
6022: LD_INT 1
6024: PPUSH
6025: LD_INT 0
6027: PPUSH
6028: LD_INT 0
6030: PPUSH
6031: CALL 14940 0 5
6035: ST_TO_ADDR
// DialogueOn ;
6036: CALL_OW 6
// if Say ( kdo1 , D5a-Sol1-1 ) then
6040: LD_VAR 0 2
6044: PPUSH
6045: LD_STRING D5a-Sol1-1
6047: PPUSH
6048: CALL_OW 88
6052: IFFALSE 6066
// Say ( Lisa , D5a-Lisa-1 ) ;
6054: LD_EXP 14
6058: PPUSH
6059: LD_STRING D5a-Lisa-1
6061: PPUSH
6062: CALL_OW 88
// if Say ( kdo1 , D5a-Sol1-2 ) then
6066: LD_VAR 0 2
6070: PPUSH
6071: LD_STRING D5a-Sol1-2
6073: PPUSH
6074: CALL_OW 88
6078: IFFALSE 6092
// Say ( Lisa , D5a-Lisa-2 ) ;
6080: LD_EXP 14
6084: PPUSH
6085: LD_STRING D5a-Lisa-2
6087: PPUSH
6088: CALL_OW 88
// if Say ( kdo1 , D5a-Sol1-3 ) then
6092: LD_VAR 0 2
6096: PPUSH
6097: LD_STRING D5a-Sol1-3
6099: PPUSH
6100: CALL_OW 88
6104: IFFALSE 6118
// Say ( Lisa , D5a-Lisa-3 ) ;
6106: LD_EXP 14
6110: PPUSH
6111: LD_STRING D5a-Lisa-3
6113: PPUSH
6114: CALL_OW 88
// DialogueOff ;
6118: CALL_OW 7
// end else
6122: GO 6424
// begin DialogueOn ;
6124: CALL_OW 6
// kdo1 := WhoSayAny ( not_char , you , sex_male , 0 , 1 ) ;
6128: LD_ADDR_VAR 0 2
6132: PUSH
6133: LD_EXP 48
6137: PPUSH
6138: LD_EXP 1
6142: PPUSH
6143: LD_INT 1
6145: PPUSH
6146: LD_INT 0
6148: PPUSH
6149: LD_INT 1
6151: PPUSH
6152: CALL 14940 0 5
6156: ST_TO_ADDR
// kdo2 := WhoSayAny ( not_char , you , sex_male , 0 , 2 ) ;
6157: LD_ADDR_VAR 0 3
6161: PUSH
6162: LD_EXP 48
6166: PPUSH
6167: LD_EXP 1
6171: PPUSH
6172: LD_INT 1
6174: PPUSH
6175: LD_INT 0
6177: PPUSH
6178: LD_INT 2
6180: PPUSH
6181: CALL 14940 0 5
6185: ST_TO_ADDR
// kdo3 := WhoSayAny ( not_char , you , sex_female , 0 , 1 ) ;
6186: LD_ADDR_VAR 0 4
6190: PUSH
6191: LD_EXP 48
6195: PPUSH
6196: LD_EXP 1
6200: PPUSH
6201: LD_INT 2
6203: PPUSH
6204: LD_INT 0
6206: PPUSH
6207: LD_INT 1
6209: PPUSH
6210: CALL 14940 0 5
6214: ST_TO_ADDR
// if Say ( kdo1 , D5-Sol1-1 ) then
6215: LD_VAR 0 2
6219: PPUSH
6220: LD_STRING D5-Sol1-1
6222: PPUSH
6223: CALL_OW 88
6227: IFFALSE 6256
// if not Say ( kdo2 , D5-Sol2-1 ) then
6229: LD_VAR 0 3
6233: PPUSH
6234: LD_STRING D5-Sol2-1
6236: PPUSH
6237: CALL_OW 88
6241: NOT
6242: IFFALSE 6256
// Say ( kdo3 , D5-FSol2-1 ) ;
6244: LD_VAR 0 4
6248: PPUSH
6249: LD_STRING D5-FSol2-1
6251: PPUSH
6252: CALL_OW 88
// if Say ( kdo1 , D5-Sol1-2 ) then
6256: LD_VAR 0 2
6260: PPUSH
6261: LD_STRING D5-Sol1-2
6263: PPUSH
6264: CALL_OW 88
6268: IFFALSE 6297
// if not Say ( kdo2 , D5-Sol2-2 ) then
6270: LD_VAR 0 3
6274: PPUSH
6275: LD_STRING D5-Sol2-2
6277: PPUSH
6278: CALL_OW 88
6282: NOT
6283: IFFALSE 6297
// Say ( kdo3 , D5-FSol2-2 ) ;
6285: LD_VAR 0 4
6289: PPUSH
6290: LD_STRING D5-FSol2-2
6292: PPUSH
6293: CALL_OW 88
// if Say ( kdo1 , D5-Sol1-3 ) then
6297: LD_VAR 0 2
6301: PPUSH
6302: LD_STRING D5-Sol1-3
6304: PPUSH
6305: CALL_OW 88
6309: IFFALSE 6338
// if not Say ( kdo2 , D5-Sol2-3 ) then
6311: LD_VAR 0 3
6315: PPUSH
6316: LD_STRING D5-Sol2-3
6318: PPUSH
6319: CALL_OW 88
6323: NOT
6324: IFFALSE 6338
// Say ( kdo3 , D5-FSol2-3 ) ;
6326: LD_VAR 0 4
6330: PPUSH
6331: LD_STRING D5-FSol2-3
6333: PPUSH
6334: CALL_OW 88
// if Say ( kdo1 , D5-Sol1-4 ) then
6338: LD_VAR 0 2
6342: PPUSH
6343: LD_STRING D5-Sol1-4
6345: PPUSH
6346: CALL_OW 88
6350: IFFALSE 6379
// if not Say ( kdo2 , D5-Sol2-4 ) then
6352: LD_VAR 0 3
6356: PPUSH
6357: LD_STRING D5-Sol2-4
6359: PPUSH
6360: CALL_OW 88
6364: NOT
6365: IFFALSE 6379
// Say ( kdo3 , D5-FSol2-4 ) ;
6367: LD_VAR 0 4
6371: PPUSH
6372: LD_STRING D5-FSol2-4
6374: PPUSH
6375: CALL_OW 88
// if Say ( kdo1 , D5-Sol1-5 ) then
6379: LD_VAR 0 2
6383: PPUSH
6384: LD_STRING D5-Sol1-5
6386: PPUSH
6387: CALL_OW 88
6391: IFFALSE 6420
// if not Say ( kdo2 , D5-Sol2-5 ) then
6393: LD_VAR 0 3
6397: PPUSH
6398: LD_STRING D5-Sol2-5
6400: PPUSH
6401: CALL_OW 88
6405: NOT
6406: IFFALSE 6420
// Say ( kdo3 , D5-FSol2-5 ) ;
6408: LD_VAR 0 4
6412: PPUSH
6413: LD_STRING D5-FSol2-5
6415: PPUSH
6416: CALL_OW 88
// DialogueOff ;
6420: CALL_OW 7
// end ; denis_can_come := true ;
6424: LD_ADDR_EXP 45
6428: PUSH
6429: LD_INT 1
6431: ST_TO_ADDR
// end ;
6432: PPOPN 5
6434: END
// var den_uz_ochocil ; on ApemanTamed ( ktery , kym ) do begin if ( GetSide ( kym ) = you ) then
6435: LD_VAR 0 2
6439: PPUSH
6440: CALL_OW 255
6444: PUSH
6445: LD_EXP 1
6449: EQUAL
6450: IFFALSE 6699
// begin opic := opic + 1 ;
6452: LD_ADDR_EXP 40
6456: PUSH
6457: LD_EXP 40
6461: PUSH
6462: LD_INT 1
6464: PLUS
6465: ST_TO_ADDR
// if kym = Den and not den_uz_ochocil then
6466: LD_VAR 0 2
6470: PUSH
6471: LD_EXP 13
6475: EQUAL
6476: PUSH
6477: LD_LOC 4
6481: NOT
6482: AND
6483: IFFALSE 6515
// begin TalkOn ;
6485: CALL 14786 0 0
// Say ( Den , D7a-Den-1 ) ;
6489: LD_EXP 13
6493: PPUSH
6494: LD_STRING D7a-Den-1
6496: PPUSH
6497: CALL_OW 88
// TalkOff ;
6501: CALL 14794 0 0
// den_uz_ochocil := true ;
6505: LD_ADDR_LOC 4
6509: PUSH
6510: LD_INT 1
6512: ST_TO_ADDR
// end else
6513: GO 6641
// if not first_ape then
6515: LD_EXP 30
6519: NOT
6520: IFFALSE 6641
// begin if kym = Glad then
6522: LD_VAR 0 2
6526: PUSH
6527: LD_EXP 11
6531: EQUAL
6532: IFFALSE 6556
// begin TalkOn ;
6534: CALL 14786 0 0
// Say ( Glad , D7b-Glad-1 ) ;
6538: LD_EXP 11
6542: PPUSH
6543: LD_STRING D7b-Glad-1
6545: PPUSH
6546: CALL_OW 88
// TalkOff ;
6550: CALL 14794 0 0
// end else
6554: GO 6641
// begin if GetSex ( kym ) = sex_male then
6556: LD_VAR 0 2
6560: PPUSH
6561: CALL_OW 258
6565: PUSH
6566: LD_INT 1
6568: EQUAL
6569: IFFALSE 6607
// begin TalkOn ;
6571: CALL 14786 0 0
// SayAny ( not_char , D7c-Sci1-1 , you , sex_male , class_scientistic , 0 ) ;
6575: LD_EXP 48
6579: PPUSH
6580: LD_STRING D7c-Sci1-1
6582: PPUSH
6583: LD_EXP 1
6587: PPUSH
6588: LD_INT 1
6590: PPUSH
6591: LD_INT 4
6593: PPUSH
6594: LD_INT 0
6596: PPUSH
6597: CALL 14860 0 6
// TalkOff ;
6601: CALL 14794 0 0
// end else
6605: GO 6641
// begin TalkOn ;
6607: CALL 14786 0 0
// SayAny ( not_char , D7c-FSci1-1 , you , sex_female , class_scientistic , 0 ) ;
6611: LD_EXP 48
6615: PPUSH
6616: LD_STRING D7c-FSci1-1
6618: PPUSH
6619: LD_EXP 1
6623: PPUSH
6624: LD_INT 2
6626: PPUSH
6627: LD_INT 4
6629: PPUSH
6630: LD_INT 0
6632: PPUSH
6633: CALL 14860 0 6
// TalkOff ;
6637: CALL 14794 0 0
// end ; end ; end ; if not first_ape then
6641: LD_EXP 30
6645: NOT
6646: IFFALSE 6699
// begin first_ape := true ;
6648: LD_ADDR_EXP 30
6652: PUSH
6653: LD_INT 1
6655: ST_TO_ADDR
// if kym <> Glad and IsLive ( Glad ) then
6656: LD_VAR 0 2
6660: PUSH
6661: LD_EXP 11
6665: NONEQUAL
6666: PUSH
6667: LD_EXP 11
6671: PPUSH
6672: CALL_OW 300
6676: AND
6677: IFFALSE 6699
// begin TalkOn ;
6679: CALL 14786 0 0
// Say ( Glad , D7c-Glad-1 ) ;
6683: LD_EXP 11
6687: PPUSH
6688: LD_STRING D7c-Glad-1
6690: PPUSH
6691: CALL_OW 88
// TalkOff ;
6695: CALL 14794 0 0
// end ; end ; end ; end ;
6699: PPOPN 2
6701: END
// every 0 0$2 trigger not FilterAllUnits ( [ [ f_side , you ] , [ f_see , arabians ] ] ) and GetDistUnits ( NearestUnitToUnit ( UnitFilter ( apemans , [ f_side , you ] ) , Lisa ) , Lisa ) < 6 do
6702: LD_INT 22
6704: PUSH
6705: LD_EXP 1
6709: PUSH
6710: EMPTY
6711: LIST
6712: LIST
6713: PUSH
6714: LD_INT 101
6716: PUSH
6717: LD_EXP 4
6721: PUSH
6722: EMPTY
6723: LIST
6724: LIST
6725: PUSH
6726: EMPTY
6727: LIST
6728: LIST
6729: PPUSH
6730: CALL_OW 69
6734: NOT
6735: PUSH
6736: LD_EXP 6
6740: PPUSH
6741: LD_INT 22
6743: PUSH
6744: LD_EXP 1
6748: PUSH
6749: EMPTY
6750: LIST
6751: LIST
6752: PPUSH
6753: CALL_OW 72
6757: PPUSH
6758: LD_EXP 14
6762: PPUSH
6763: CALL_OW 74
6767: PPUSH
6768: LD_EXP 14
6772: PPUSH
6773: CALL_OW 296
6777: PUSH
6778: LD_INT 6
6780: LESS
6781: AND
6782: IFFALSE 6807
6784: GO 6786
6786: DISABLE
// begin TalkOn ;
6787: CALL 14786 0 0
// Say ( Lisa , D8-Lisa-1 ) ;
6791: LD_EXP 14
6795: PPUSH
6796: LD_STRING D8-Lisa-1
6798: PPUSH
6799: CALL_OW 88
// TalkOff ;
6803: CALL 14794 0 0
// end ;
6807: END
// every 0 0$10 trigger cil_mit_1_ape_eng_splnen do var qr ;
6808: LD_EXP 41
6812: IFFALSE 6855
6814: GO 6816
6816: DISABLE
6817: LD_INT 0
6819: PPUSH
// begin qr := Query ( Q2 ) ;
6820: LD_ADDR_VAR 0 1
6824: PUSH
6825: LD_STRING Q2
6827: PPUSH
6828: CALL_OW 97
6832: ST_TO_ADDR
// end_the_mission_allowed := true ;
6833: LD_ADDR_OWVAR 57
6837: PUSH
6838: LD_INT 1
6840: ST_TO_ADDR
// if qr = 1 then
6841: LD_VAR 0 1
6845: PUSH
6846: LD_INT 1
6848: EQUAL
6849: IFFALSE 6855
// begin Vyhra ;
6851: CALL 3183 0 0
// end ; end ; end_of_file
6855: PPOPN 1
6857: END
// export depot , laboratore , budovy ; on BuildingComplete ( build ) do begin budovy := budovy union build ;
6858: LD_ADDR_EXP 63
6862: PUSH
6863: LD_EXP 63
6867: PUSH
6868: LD_VAR 0 1
6872: UNION
6873: ST_TO_ADDR
// if GetBType ( build ) = b_lab then
6874: LD_VAR 0 1
6878: PPUSH
6879: CALL_OW 266
6883: PUSH
6884: LD_INT 6
6886: EQUAL
6887: IFFALSE 6905
// laboratore := laboratore union build ;
6889: LD_ADDR_EXP 62
6893: PUSH
6894: LD_EXP 62
6898: PUSH
6899: LD_VAR 0 1
6903: UNION
6904: ST_TO_ADDR
// if GetBType ( build ) = b_depot then
6905: LD_VAR 0 1
6909: PPUSH
6910: CALL_OW 266
6914: PUSH
6915: LD_INT 0
6917: EQUAL
6918: IFFALSE 6942
// begin depot := build ;
6920: LD_ADDR_EXP 61
6924: PUSH
6925: LD_VAR 0 1
6929: ST_TO_ADDR
// SetBName ( build , delta ) ;
6930: LD_VAR 0 1
6934: PPUSH
6935: LD_STRING delta
6937: PPUSH
6938: CALL_OW 500
// end ; if GetBType ( build ) = b_workshop then
6942: LD_VAR 0 1
6946: PPUSH
6947: CALL_OW 266
6951: PUSH
6952: LD_INT 2
6954: EQUAL
6955: IFFALSE 6964
// MyHint ( Recycle ) ;
6957: LD_STRING Recycle
6959: PPUSH
6960: CALL 15134 0 1
// if GetBType ( build ) = b_ext_radar then
6964: LD_VAR 0 1
6968: PPUSH
6969: CALL_OW 266
6973: PUSH
6974: LD_INT 20
6976: EQUAL
6977: IFFALSE 6986
// MyHint ( Radar ) ;
6979: LD_STRING Radar
6981: PPUSH
6982: CALL 15134 0 1
// end ;
6986: PPOPN 1
6988: END
// on UnitDestroyed ( un ) do begin if un in budovy then
6989: LD_VAR 0 1
6993: PUSH
6994: LD_EXP 63
6998: IN
6999: IFFALSE 7017
// budovy := budovy diff un ;
7001: LD_ADDR_EXP 63
7005: PUSH
7006: LD_EXP 63
7010: PUSH
7011: LD_VAR 0 1
7015: DIFF
7016: ST_TO_ADDR
// if un in laboratore then
7017: LD_VAR 0 1
7021: PUSH
7022: LD_EXP 62
7026: IN
7027: IFFALSE 7045
// laboratore := laboratore diff un ;
7029: LD_ADDR_EXP 62
7033: PUSH
7034: LD_EXP 62
7038: PUSH
7039: LD_VAR 0 1
7043: DIFF
7044: ST_TO_ADDR
// if un in tvoji_lidi then
7045: LD_VAR 0 1
7049: PUSH
7050: LD_EXP 47
7054: IN
7055: IFFALSE 7087
// begin tvoji_lidi := tvoji_lidi diff un ;
7057: LD_ADDR_EXP 47
7061: PUSH
7062: LD_EXP 47
7066: PUSH
7067: LD_VAR 0 1
7071: DIFF
7072: ST_TO_ADDR
// ztraty := ztraty + 1 ;
7073: LD_ADDR_EXP 50
7077: PUSH
7078: LD_EXP 50
7082: PUSH
7083: LD_INT 1
7085: PLUS
7086: ST_TO_ADDR
// end ; if un in oma then
7087: LD_VAR 0 1
7091: PUSH
7092: LD_EXP 7
7096: IN
7097: IFFALSE 7115
// oma := oma diff un ;
7099: LD_ADDR_EXP 7
7103: PUSH
7104: LD_EXP 7
7108: PUSH
7109: LD_VAR 0 1
7113: DIFF
7114: ST_TO_ADDR
// if un in arabs_cars then
7115: LD_VAR 0 1
7119: PUSH
7120: LD_EXP 9
7124: IN
7125: IFFALSE 7143
// arabs_cars := arabs_cars diff un ;
7127: LD_ADDR_EXP 9
7131: PUSH
7132: LD_EXP 9
7136: PUSH
7137: LD_VAR 0 1
7141: DIFF
7142: ST_TO_ADDR
// if un in apemans then
7143: LD_VAR 0 1
7147: PUSH
7148: LD_EXP 6
7152: IN
7153: IFFALSE 7171
// apemans := apemans diff un ;
7155: LD_ADDR_EXP 6
7159: PUSH
7160: LD_EXP 6
7164: PUSH
7165: LD_VAR 0 1
7169: DIFF
7170: ST_TO_ADDR
// if un = JMM then
7171: LD_VAR 0 1
7175: PUSH
7176: LD_EXP 10
7180: EQUAL
7181: IFFALSE 7193
// begin disable ( 0 ) ;
7183: LD_INT 0
7185: DISABLE_MARKED
// YouLost ( JMM ) ;
7186: LD_STRING JMM
7188: PPUSH
7189: CALL_OW 104
// end ; if UnitFilter ( un , [ [ f_side , you ] , [ f_nation , nation_nature ] ] ) then
7193: LD_VAR 0 1
7197: PPUSH
7198: LD_INT 22
7200: PUSH
7201: LD_EXP 1
7205: PUSH
7206: EMPTY
7207: LIST
7208: LIST
7209: PUSH
7210: LD_INT 23
7212: PUSH
7213: LD_INT 0
7215: PUSH
7216: EMPTY
7217: LIST
7218: LIST
7219: PUSH
7220: EMPTY
7221: LIST
7222: LIST
7223: PPUSH
7224: CALL_OW 72
7228: IFFALSE 7244
// begin opic := opic - 1 ;
7230: LD_ADDR_EXP 40
7234: PUSH
7235: LD_EXP 40
7239: PUSH
7240: LD_INT 1
7242: MINUS
7243: ST_TO_ADDR
// end ; end ;
7244: PPOPN 1
7246: END
// on VehicleCaptured ( vehnew , vehold , origside , hum ) do begin if origside = you then
7247: LD_VAR 0 3
7251: PUSH
7252: LD_EXP 1
7256: EQUAL
7257: IFFALSE 7290
// begin arabs_cars := arabs_cars union vehnew ;
7259: LD_ADDR_EXP 9
7263: PUSH
7264: LD_EXP 9
7268: PUSH
7269: LD_VAR 0 1
7273: UNION
7274: ST_TO_ADDR
// evade_shortest_way ( vehnew , false , true ) ;
7275: LD_VAR 0 1
7279: PPUSH
7280: LD_INT 0
7282: PPUSH
7283: LD_INT 1
7285: PPUSH
7286: CALL 12801 0 3
// end ; if origside = arabians then
7290: LD_VAR 0 3
7294: PUSH
7295: LD_EXP 4
7299: EQUAL
7300: IFFALSE 7318
// begin arabs_cars := arabs_cars diff vehold ;
7302: LD_ADDR_EXP 9
7306: PUSH
7307: LD_EXP 9
7311: PUSH
7312: LD_VAR 0 2
7316: DIFF
7317: ST_TO_ADDR
// end ; end ;
7318: PPOPN 4
7320: END
// every 0 0$10 do
7321: GO 7323
7323: DISABLE
// Randomize ;
7324: CALL_OW 10
7328: END
// every 0 0$10 trigger apemans < 5 do var op ;
7329: LD_EXP 6
7333: PUSH
7334: LD_INT 5
7336: LESS
7337: IFFALSE 7603
7339: GO 7341
7341: DISABLE
7342: LD_INT 0
7344: PPUSH
// begin InitUc ;
7345: CALL_OW 18
// InitHc ;
7349: CALL_OW 19
// uc_nation := nation_nature ;
7353: LD_ADDR_OWVAR 21
7357: PUSH
7358: LD_INT 0
7360: ST_TO_ADDR
// uc_side := 0 ;
7361: LD_ADDR_OWVAR 20
7365: PUSH
7366: LD_INT 0
7368: ST_TO_ADDR
// hc_class := class_apeman ;
7369: LD_ADDR_OWVAR 28
7373: PUSH
7374: LD_INT 12
7376: ST_TO_ADDR
// hc_agressivity := Rand ( - 5 , 10 ) ;
7377: LD_ADDR_OWVAR 35
7381: PUSH
7382: LD_INT 5
7384: NEG
7385: PPUSH
7386: LD_INT 10
7388: PPUSH
7389: CALL_OW 12
7393: ST_TO_ADDR
// hc_sex := Rand ( 1 , 2 ) ;
7394: LD_ADDR_OWVAR 27
7398: PUSH
7399: LD_INT 1
7401: PPUSH
7402: LD_INT 2
7404: PPUSH
7405: CALL_OW 12
7409: ST_TO_ADDR
// op := CreateHuman ;
7410: LD_ADDR_VAR 0 1
7414: PUSH
7415: CALL_OW 44
7419: ST_TO_ADDR
// case rand ( 1 , 4 ) of 1 :
7420: LD_INT 1
7422: PPUSH
7423: LD_INT 4
7425: PPUSH
7426: CALL_OW 12
7430: PUSH
7431: LD_INT 1
7433: DOUBLE
7434: EQUAL
7435: IFTRUE 7439
7437: GO 7463
7439: POP
// PlaceUnitXYR ( op , 16 , 1 , 5 , false ) ; 2 :
7440: LD_VAR 0 1
7444: PPUSH
7445: LD_INT 16
7447: PPUSH
7448: LD_INT 1
7450: PPUSH
7451: LD_INT 5
7453: PPUSH
7454: LD_INT 0
7456: PPUSH
7457: CALL_OW 50
7461: GO 7560
7463: LD_INT 2
7465: DOUBLE
7466: EQUAL
7467: IFTRUE 7471
7469: GO 7495
7471: POP
// PlaceUnitXYR ( op , 46 , 1 , 5 , false ) ; 3 :
7472: LD_VAR 0 1
7476: PPUSH
7477: LD_INT 46
7479: PPUSH
7480: LD_INT 1
7482: PPUSH
7483: LD_INT 5
7485: PPUSH
7486: LD_INT 0
7488: PPUSH
7489: CALL_OW 50
7493: GO 7560
7495: LD_INT 3
7497: DOUBLE
7498: EQUAL
7499: IFTRUE 7503
7501: GO 7527
7503: POP
// PlaceUnitXYR ( op , 1 , 23 , 5 , false ) ; 4 :
7504: LD_VAR 0 1
7508: PPUSH
7509: LD_INT 1
7511: PPUSH
7512: LD_INT 23
7514: PPUSH
7515: LD_INT 5
7517: PPUSH
7518: LD_INT 0
7520: PPUSH
7521: CALL_OW 50
7525: GO 7560
7527: LD_INT 4
7529: DOUBLE
7530: EQUAL
7531: IFTRUE 7535
7533: GO 7559
7535: POP
// PlaceUnitXYR ( op , 80 , 1 , 5 , false ) ; end ;
7536: LD_VAR 0 1
7540: PPUSH
7541: LD_INT 80
7543: PPUSH
7544: LD_INT 1
7546: PPUSH
7547: LD_INT 5
7549: PPUSH
7550: LD_INT 0
7552: PPUSH
7553: CALL_OW 50
7557: GO 7560
7559: POP
// apemans := apemans union op ;
7560: LD_ADDR_EXP 6
7564: PUSH
7565: LD_EXP 6
7569: PUSH
7570: LD_VAR 0 1
7574: UNION
7575: ST_TO_ADDR
// added_apes := added_apes + 1 ;
7576: LD_ADDR_EXP 52
7580: PUSH
7581: LD_EXP 52
7585: PUSH
7586: LD_INT 1
7588: PLUS
7589: ST_TO_ADDR
// if added_apes < max_added_apes then
7590: LD_EXP 52
7594: PUSH
7595: LD_EXP 53
7599: LESS
7600: IFFALSE 7603
// enable ;
7602: ENABLE
// end ; end_of_file
7603: PPOPN 1
7605: END
// var amici_v ; var amici_h ; var amici_b ; on DestinationUnreachable ( un ) do begin if GetSide ( un ) = arabians then
7606: LD_VAR 0 1
7610: PPUSH
7611: CALL_OW 255
7615: PUSH
7616: LD_EXP 4
7620: EQUAL
7621: IFFALSE 7704
// begin if attacking and laboratore then
7623: LD_EXP 38
7627: PUSH
7628: LD_EXP 62
7632: AND
7633: IFFALSE 7692
// begin ComAgressiveMove ( un , GetX ( laboratore [ 1 ] ) , GetY ( laboratore [ 1 ] ) ) ;
7635: LD_VAR 0 1
7639: PPUSH
7640: LD_EXP 62
7644: PUSH
7645: LD_INT 1
7647: ARRAY
7648: PPUSH
7649: CALL_OW 250
7653: PPUSH
7654: LD_EXP 62
7658: PUSH
7659: LD_INT 1
7661: ARRAY
7662: PPUSH
7663: CALL_OW 251
7667: PPUSH
7668: CALL_OW 114
// AddComAttackUnit ( un , laboratore [ 1 ] ) ;
7672: LD_VAR 0 1
7676: PPUSH
7677: LD_EXP 62
7681: PUSH
7682: LD_INT 1
7684: ARRAY
7685: PPUSH
7686: CALL_OW 175
// end else
7690: GO 7704
// ComMoveToArea ( un , border ) ;
7692: LD_VAR 0 1
7696: PPUSH
7697: LD_INT 7
7699: PPUSH
7700: CALL_OW 113
// end ; end ;
7704: PPOPN 1
7706: END
// every 0 0$50 do
7707: GO 7709
7709: DISABLE
// begin Wait ( wait_first_attack ) ;
7710: LD_EXP 59
7714: PPUSH
7715: CALL_OW 67
// attacky := attacky + 1 ;
7719: LD_ADDR_EXP 39
7723: PUSH
7724: LD_EXP 39
7728: PUSH
7729: LD_INT 1
7731: PLUS
7732: ST_TO_ADDR
// attacking := true ;
7733: LD_ADDR_EXP 38
7737: PUSH
7738: LD_INT 1
7740: ST_TO_ADDR
// F_first_attack ;
7741: CALL 9272 0 0
// oma := FilterAllUnits ( [ f_side , arabians ] ) ;
7745: LD_ADDR_EXP 7
7749: PUSH
7750: LD_INT 22
7752: PUSH
7753: LD_EXP 4
7757: PUSH
7758: EMPTY
7759: LIST
7760: LIST
7761: PPUSH
7762: CALL_OW 69
7766: ST_TO_ADDR
// end ;
7767: END
// every 0 0$1 do var i ;
7768: GO 7770
7770: DISABLE
7771: LD_INT 0
7773: PPUSH
// begin om := FilterAllUnits ( [ f_side , arabians ] ) ;
7774: LD_ADDR_EXP 8
7778: PUSH
7779: LD_INT 22
7781: PUSH
7782: LD_EXP 4
7786: PUSH
7787: EMPTY
7788: LIST
7789: LIST
7790: PPUSH
7791: CALL_OW 69
7795: ST_TO_ADDR
// for i in om do
7796: LD_ADDR_VAR 0 1
7800: PUSH
7801: LD_EXP 8
7805: PUSH
7806: FOR_IN
7807: IFFALSE 7843
// if IsIdle ( i ) then
7809: LD_VAR 0 1
7813: PPUSH
7814: CALL_OW 316
7818: IFFALSE 7841
// begin RaiseSailEvent ( i ) ;
7820: LD_VAR 0 1
7824: PPUSH
7825: CALL_OW 427
// ComMoveToArea ( i , border ) ;
7829: LD_VAR 0 1
7833: PPUSH
7834: LD_INT 7
7836: PPUSH
7837: CALL_OW 113
// end ;
7841: GO 7806
7843: POP
7844: POP
// enable ;
7845: ENABLE
// end ;
7846: PPOPN 1
7848: END
// on SailEvent ( x ) do var k ;
7849: LD_INT 0
7851: PPUSH
// begin k := 0 ;
7852: LD_ADDR_VAR 0 2
7856: PUSH
7857: LD_INT 0
7859: ST_TO_ADDR
// while k < 3 and IsLive ( x ) do
7860: LD_VAR 0 2
7864: PUSH
7865: LD_INT 3
7867: LESS
7868: PUSH
7869: LD_VAR 0 1
7873: PPUSH
7874: CALL_OW 300
7878: AND
7879: IFFALSE 7915
// begin wait ( 0 0$1 ) ;
7881: LD_INT 35
7883: PPUSH
7884: CALL_OW 67
// if IsIdle ( x ) then
7888: LD_VAR 0 1
7892: PPUSH
7893: CALL_OW 316
7897: IFFALSE 7913
// k := k + 1 ;
7899: LD_ADDR_VAR 0 2
7903: PUSH
7904: LD_VAR 0 2
7908: PUSH
7909: LD_INT 1
7911: PLUS
7912: ST_TO_ADDR
// end ;
7913: GO 7860
// ComMoveToArea ( x , border ) ;
7915: LD_VAR 0 1
7919: PPUSH
7920: LD_INT 7
7922: PPUSH
7923: CALL_OW 113
// AddComWait ( x , 0 0$10 ) ;
7927: LD_VAR 0 1
7931: PPUSH
7932: LD_INT 350
7934: PPUSH
7935: CALL_OW 202
// if laboratore then
7939: LD_EXP 62
7943: IFFALSE 7982
// AddComAgressiveMove ( x , GetX ( laboratore [ 1 ] ) , GetY ( laboratore [ 1 ] ) ) ;
7945: LD_VAR 0 1
7949: PPUSH
7950: LD_EXP 62
7954: PUSH
7955: LD_INT 1
7957: ARRAY
7958: PPUSH
7959: CALL_OW 250
7963: PPUSH
7964: LD_EXP 62
7968: PUSH
7969: LD_INT 1
7971: ARRAY
7972: PPUSH
7973: CALL_OW 251
7977: PPUSH
7978: CALL_OW 174
// end ;
7982: PPOPN 2
7984: END
// export last_attack_was ; every 3 3$50.0 + 3 3$0 trigger budovy and not attacking do
7985: LD_EXP 63
7989: PUSH
7990: LD_EXP 38
7994: NOT
7995: AND
7996: IFFALSE 8026
7998: GO 8000
8000: DISABLE
// begin if difficulty = 1 then
8001: LD_OWVAR 67
8005: PUSH
8006: LD_INT 1
8008: EQUAL
8009: IFFALSE 8026
// begin last_attack_was := tick ;
8011: LD_ADDR_EXP 64
8015: PUSH
8016: LD_OWVAR 1
8020: ST_TO_ADDR
// WhichAttack ;
8021: CALL 8246 0 0
// enable ;
8025: ENABLE
// end ; end ;
8026: END
// every 3 3$10.0 + 2 2$0 trigger budovy and not attacking do
8027: LD_EXP 63
8031: PUSH
8032: LD_EXP 38
8036: NOT
8037: AND
8038: IFFALSE 8068
8040: GO 8042
8042: DISABLE
// begin if difficulty = 2 then
8043: LD_OWVAR 67
8047: PUSH
8048: LD_INT 2
8050: EQUAL
8051: IFFALSE 8068
// begin last_attack_was := tick ;
8053: LD_ADDR_EXP 64
8057: PUSH
8058: LD_OWVAR 1
8062: ST_TO_ADDR
// WhichAttack ;
8063: CALL 8246 0 0
// enable ;
8067: ENABLE
// end ; end ;
8068: END
// every 2 2$30.0 + 1 1$30 trigger budovy and not attacking do
8069: LD_EXP 63
8073: PUSH
8074: LD_EXP 38
8078: NOT
8079: AND
8080: IFFALSE 8110
8082: GO 8084
8084: DISABLE
// begin if difficulty = 3 then
8085: LD_OWVAR 67
8089: PUSH
8090: LD_INT 3
8092: EQUAL
8093: IFFALSE 8110
// begin last_attack_was := tick ;
8095: LD_ADDR_EXP 64
8099: PUSH
8100: LD_OWVAR 1
8104: ST_TO_ADDR
// WhichAttack ;
8105: CALL 8246 0 0
// enable ;
8109: ENABLE
// end ; end ;
8110: END
// function free_cars ; var i ; begin
8111: LD_INT 0
8113: PPUSH
8114: PPUSH
// for i in FilterAllUnits ( [ [ f_type , unit_vehicle ] , [ f_side , you ] ] ) do
8115: LD_ADDR_VAR 0 2
8119: PUSH
8120: LD_INT 21
8122: PUSH
8123: LD_INT 2
8125: PUSH
8126: EMPTY
8127: LIST
8128: LIST
8129: PUSH
8130: LD_INT 22
8132: PUSH
8133: LD_EXP 1
8137: PUSH
8138: EMPTY
8139: LIST
8140: LIST
8141: PUSH
8142: EMPTY
8143: LIST
8144: LIST
8145: PPUSH
8146: CALL_OW 69
8150: PUSH
8151: FOR_IN
8152: IFFALSE 8178
// begin if not IsDrivenBy ( i ) then
8154: LD_VAR 0 2
8158: PPUSH
8159: CALL_OW 311
8163: NOT
8164: IFFALSE 8176
// begin result := true ;
8166: LD_ADDR_VAR 0 1
8170: PUSH
8171: LD_INT 1
8173: ST_TO_ADDR
// break ;
8174: GO 8178
// end ; end ;
8176: GO 8151
8178: POP
8179: POP
// end ;
8180: LD_VAR 0 1
8184: RET
// function lonely ; begin
8185: LD_INT 0
8187: PPUSH
// result := FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_human ] , [ f_dist , depot , 16 ] ] ) ;
8188: LD_ADDR_VAR 0 1
8192: PUSH
8193: LD_INT 22
8195: PUSH
8196: LD_EXP 1
8200: PUSH
8201: EMPTY
8202: LIST
8203: LIST
8204: PUSH
8205: LD_INT 21
8207: PUSH
8208: LD_INT 1
8210: PUSH
8211: EMPTY
8212: LIST
8213: LIST
8214: PUSH
8215: LD_INT 91
8217: PUSH
8218: LD_EXP 61
8222: PUSH
8223: LD_INT 16
8225: PUSH
8226: EMPTY
8227: LIST
8228: LIST
8229: LIST
8230: PUSH
8231: EMPTY
8232: LIST
8233: LIST
8234: LIST
8235: PPUSH
8236: CALL_OW 69
8240: ST_TO_ADDR
// end ;
8241: LD_VAR 0 1
8245: RET
// function WhichAttack ; var l ; begin
8246: LD_INT 0
8248: PPUSH
8249: PPUSH
// attacky := attacky + 1 ;
8250: LD_ADDR_EXP 39
8254: PUSH
8255: LD_EXP 39
8259: PUSH
8260: LD_INT 1
8262: PLUS
8263: ST_TO_ADDR
// attacking := true ;
8264: LD_ADDR_EXP 38
8268: PUSH
8269: LD_INT 1
8271: ST_TO_ADDR
// l := lonely ;
8272: LD_ADDR_VAR 0 2
8276: PUSH
8277: CALL 8185 0 0
8281: ST_TO_ADDR
// case true of l :
8282: LD_INT 1
8284: PUSH
8285: LD_VAR 0 2
8289: DOUBLE
8290: EQUAL
8291: IFTRUE 8295
8293: GO 8307
8295: POP
// F_lonely_attack ( l ) ; free_cars and rand ( 1 , 3 ) = 1 :
8296: LD_VAR 0 2
8300: PPUSH
8301: CALL 11286 0 1
8305: GO 8378
8307: CALL 8111 0 0
8311: PUSH
8312: LD_INT 1
8314: PPUSH
8315: LD_INT 3
8317: PPUSH
8318: CALL_OW 12
8322: PUSH
8323: LD_INT 1
8325: EQUAL
8326: AND
8327: DOUBLE
8328: EQUAL
8329: IFTRUE 8333
8331: GO 8340
8333: POP
// F_thief_attack ; budovy and rand ( 1 , 2 ) = 1 :
8334: CALL 10542 0 0
8338: GO 8378
8340: LD_EXP 63
8344: PUSH
8345: LD_INT 1
8347: PPUSH
8348: LD_INT 2
8350: PPUSH
8351: CALL_OW 12
8355: PUSH
8356: LD_INT 1
8358: EQUAL
8359: AND
8360: DOUBLE
8361: EQUAL
8362: IFTRUE 8366
8364: GO 8373
8366: POP
// F_mine_attack ; else
8367: CALL 9806 0 0
8371: GO 8378
8373: POP
// F_next_attack ; end ;
8374: CALL 11639 0 0
// if attacky < utoku then
8378: LD_EXP 39
8382: PUSH
8383: LD_EXP 60
8387: LESS
8388: IFFALSE 8391
// enable ;
8390: ENABLE
// oma := FilterAllUnits ( [ [ f_side , arabians ] , [ f_type , unit_human ] ] ) ;
8391: LD_ADDR_EXP 7
8395: PUSH
8396: LD_INT 22
8398: PUSH
8399: LD_EXP 4
8403: PUSH
8404: EMPTY
8405: LIST
8406: LIST
8407: PUSH
8408: LD_INT 21
8410: PUSH
8411: LD_INT 1
8413: PUSH
8414: EMPTY
8415: LIST
8416: LIST
8417: PUSH
8418: EMPTY
8419: LIST
8420: LIST
8421: PPUSH
8422: CALL_OW 69
8426: ST_TO_ADDR
// end ;
8427: LD_VAR 0 1
8431: RET
// every 0 0$1.0 do var i , a ;
8432: GO 8434
8434: DISABLE
8435: LD_INT 0
8437: PPUSH
8438: PPUSH
// begin oma := FilterAllUnits ( [ [ f_side , arabians ] , [ f_type , unit_human ] ] ) ;
8439: LD_ADDR_EXP 7
8443: PUSH
8444: LD_INT 22
8446: PUSH
8447: LD_EXP 4
8451: PUSH
8452: EMPTY
8453: LIST
8454: LIST
8455: PUSH
8456: LD_INT 21
8458: PUSH
8459: LD_INT 1
8461: PUSH
8462: EMPTY
8463: LIST
8464: LIST
8465: PUSH
8466: EMPTY
8467: LIST
8468: LIST
8469: PPUSH
8470: CALL_OW 69
8474: ST_TO_ADDR
// if oma then
8475: LD_EXP 7
8479: IFFALSE 8788
// begin a := oma [ rand ( 1 , oma ) ] ;
8481: LD_ADDR_VAR 0 2
8485: PUSH
8486: LD_EXP 7
8490: PUSH
8491: LD_INT 1
8493: PPUSH
8494: LD_EXP 7
8498: PPUSH
8499: CALL_OW 12
8503: ARRAY
8504: ST_TO_ADDR
// if ( tick - last_attack_was ) > 5 5$0 then
8505: LD_OWVAR 1
8509: PUSH
8510: LD_EXP 64
8514: MINUS
8515: PUSH
8516: LD_INT 10500
8518: GREATER
8519: IFFALSE 8571
// ComAttackUnit ( oma , NearestUnitToUnit ( FilterAllUnits ( [ f_side , you ] ) , oma [ Rand ( 1 , oma ) ] ) ) ;
8521: LD_EXP 7
8525: PPUSH
8526: LD_INT 22
8528: PUSH
8529: LD_EXP 1
8533: PUSH
8534: EMPTY
8535: LIST
8536: LIST
8537: PPUSH
8538: CALL_OW 69
8542: PPUSH
8543: LD_EXP 7
8547: PUSH
8548: LD_INT 1
8550: PPUSH
8551: LD_EXP 7
8555: PPUSH
8556: CALL_OW 12
8560: ARRAY
8561: PPUSH
8562: CALL_OW 74
8566: PPUSH
8567: CALL_OW 115
// if ( tick - last_attack_was ) > 7 7$0 then
8571: LD_OWVAR 1
8575: PUSH
8576: LD_EXP 64
8580: MINUS
8581: PUSH
8582: LD_INT 14700
8584: GREATER
8585: IFFALSE 8622
// evade_shortest_way_from_xy ( getx ( a ) , gety ( a ) , oma , true , true ) ;
8587: LD_VAR 0 2
8591: PPUSH
8592: CALL_OW 250
8596: PPUSH
8597: LD_VAR 0 2
8601: PPUSH
8602: CALL_OW 251
8606: PPUSH
8607: LD_EXP 7
8611: PPUSH
8612: LD_INT 1
8614: PPUSH
8615: LD_INT 1
8617: PPUSH
8618: CALL 12888 0 5
// for i in oma do
8622: LD_ADDR_VAR 0 1
8626: PUSH
8627: LD_EXP 7
8631: PUSH
8632: FOR_IN
8633: IFFALSE 8786
// begin if IsIdle ( i ) and IsInArea ( i , border ) then
8635: LD_VAR 0 1
8639: PPUSH
8640: CALL_OW 316
8644: PUSH
8645: LD_VAR 0 1
8649: PPUSH
8650: LD_INT 7
8652: PPUSH
8653: CALL_OW 308
8657: AND
8658: IFFALSE 8784
// begin if IsInUnit ( i ) then
8660: LD_VAR 0 1
8664: PPUSH
8665: CALL_OW 310
8669: IFFALSE 8714
// arabs_cars := arabs_cars union UnitFilter ( IsInUnit ( i ) , [ f_not , [ f_weapon , us_cargo_bay ] ] ) ;
8671: LD_ADDR_EXP 9
8675: PUSH
8676: LD_EXP 9
8680: PUSH
8681: LD_VAR 0 1
8685: PPUSH
8686: CALL_OW 310
8690: PPUSH
8691: LD_INT 3
8693: PUSH
8694: LD_INT 34
8696: PUSH
8697: LD_INT 12
8699: PUSH
8700: EMPTY
8701: LIST
8702: LIST
8703: PUSH
8704: EMPTY
8705: LIST
8706: LIST
8707: PPUSH
8708: CALL_OW 72
8712: UNION
8713: ST_TO_ADDR
// RemoveUnit ( IsInUnit ( i ) ) ;
8714: LD_VAR 0 1
8718: PPUSH
8719: CALL_OW 310
8723: PPUSH
8724: CALL_OW 64
// SetLives ( IsInUnit ( i ) , 1000 ) ;
8728: LD_VAR 0 1
8732: PPUSH
8733: CALL_OW 310
8737: PPUSH
8738: LD_INT 1000
8740: PPUSH
8741: CALL_OW 234
// DestroyUnit ( i ) ;
8745: LD_VAR 0 1
8749: PPUSH
8750: CALL_OW 65
// oma := oma diff i ;
8754: LD_ADDR_EXP 7
8758: PUSH
8759: LD_EXP 7
8763: PUSH
8764: LD_VAR 0 1
8768: DIFF
8769: ST_TO_ADDR
// away_from_last_attack := away_from_last_attack + 1 ;
8770: LD_ADDR_EXP 32
8774: PUSH
8775: LD_EXP 32
8779: PUSH
8780: LD_INT 1
8782: PLUS
8783: ST_TO_ADDR
// end ; end ;
8784: GO 8632
8786: POP
8787: POP
// end ; enable ;
8788: ENABLE
// end ;
8789: PPOPN 2
8791: END
// every 0 0$2 trigger attacking do var aro , ar , uso , us , a , i ;
8792: LD_EXP 38
8796: IFFALSE 9058
8798: GO 8800
8800: DISABLE
8801: LD_INT 0
8803: PPUSH
8804: PPUSH
8805: PPUSH
8806: PPUSH
8807: PPUSH
8808: PPUSH
// begin aro := GetLives ( FilterAllUnits ( [ f_side , arabians ] ) ) ;
8809: LD_ADDR_VAR 0 1
8813: PUSH
8814: LD_INT 22
8816: PUSH
8817: LD_EXP 4
8821: PUSH
8822: EMPTY
8823: LIST
8824: LIST
8825: PPUSH
8826: CALL_OW 69
8830: PPUSH
8831: CALL_OW 256
8835: ST_TO_ADDR
// uso := GetLives ( FilterAllUnits ( [ f_side , you ] ) ) ;
8836: LD_ADDR_VAR 0 3
8840: PUSH
8841: LD_INT 22
8843: PUSH
8844: LD_EXP 1
8848: PUSH
8849: EMPTY
8850: LIST
8851: LIST
8852: PPUSH
8853: CALL_OW 69
8857: PPUSH
8858: CALL_OW 256
8862: ST_TO_ADDR
// wait ( 0 0$2 ) ;
8863: LD_INT 70
8865: PPUSH
8866: CALL_OW 67
// while attacking do
8870: LD_EXP 38
8874: IFFALSE 9057
// begin ar := GetLives ( FilterAllUnits ( [ f_side , arabians ] ) ) ;
8876: LD_ADDR_VAR 0 2
8880: PUSH
8881: LD_INT 22
8883: PUSH
8884: LD_EXP 4
8888: PUSH
8889: EMPTY
8890: LIST
8891: LIST
8892: PPUSH
8893: CALL_OW 69
8897: PPUSH
8898: CALL_OW 256
8902: ST_TO_ADDR
// us := GetLives ( FilterAllUnits ( [ f_side , you ] ) ) ;
8903: LD_ADDR_VAR 0 4
8907: PUSH
8908: LD_INT 22
8910: PUSH
8911: LD_EXP 1
8915: PUSH
8916: EMPTY
8917: LIST
8918: LIST
8919: PPUSH
8920: CALL_OW 69
8924: PPUSH
8925: CALL_OW 256
8929: ST_TO_ADDR
// if ( aro - ar ) * 1.2 < uso - us then
8930: LD_VAR 0 1
8934: PUSH
8935: LD_VAR 0 2
8939: MINUS
8940: PUSH
8941: LD_REAL  1.20000000000000E+0000
8944: MUL
8945: PUSH
8946: LD_VAR 0 3
8950: PUSH
8951: LD_VAR 0 4
8955: MINUS
8956: LESS
8957: IFFALSE 9028
// begin a := FilterAllUnits ( [ f_side , arabians ] ) ;
8959: LD_ADDR_VAR 0 5
8963: PUSH
8964: LD_INT 22
8966: PUSH
8967: LD_EXP 4
8971: PUSH
8972: EMPTY
8973: LIST
8974: LIST
8975: PPUSH
8976: CALL_OW 69
8980: ST_TO_ADDR
// for i in a do
8981: LD_ADDR_VAR 0 6
8985: PUSH
8986: LD_VAR 0 5
8990: PUSH
8991: FOR_IN
8992: IFFALSE 9026
// if GetLives ( i ) < 400 then
8994: LD_VAR 0 6
8998: PPUSH
8999: CALL_OW 256
9003: PUSH
9004: LD_INT 400
9006: LESS
9007: IFFALSE 9024
// evade_shortest_way ( i , false , true ) ;
9009: LD_VAR 0 6
9013: PPUSH
9014: LD_INT 0
9016: PPUSH
9017: LD_INT 1
9019: PPUSH
9020: CALL 12801 0 3
9024: GO 8991
9026: POP
9027: POP
// end ; wait ( 0 0$0.5 ) ;
9028: LD_INT 18
9030: PPUSH
9031: CALL_OW 67
// aro := ar ;
9035: LD_ADDR_VAR 0 1
9039: PUSH
9040: LD_VAR 0 2
9044: ST_TO_ADDR
// uso := us ;
9045: LD_ADDR_VAR 0 3
9049: PUSH
9050: LD_VAR 0 4
9054: ST_TO_ADDR
// end ;
9055: GO 8870
// enable ;
9057: ENABLE
// end ;
9058: PPOPN 6
9060: END
// every 0 0$1.0 trigger not oma do
9061: LD_EXP 7
9065: NOT
9066: IFFALSE 9120
9068: GO 9070
9070: DISABLE
// begin attacking := false ;
9071: LD_ADDR_EXP 38
9075: PUSH
9076: LD_INT 0
9078: ST_TO_ADDR
// first_attack := false ;
9079: LD_ADDR_EXP 33
9083: PUSH
9084: LD_INT 0
9086: ST_TO_ADDR
// mine_attack := false ;
9087: LD_ADDR_EXP 34
9091: PUSH
9092: LD_INT 0
9094: ST_TO_ADDR
// thief_attack := false ;
9095: LD_ADDR_EXP 35
9099: PUSH
9100: LD_INT 0
9102: ST_TO_ADDR
// lonely_attack := false ;
9103: LD_ADDR_EXP 36
9107: PUSH
9108: LD_INT 0
9110: ST_TO_ADDR
// next_attack := false ;
9111: LD_ADDR_EXP 37
9115: PUSH
9116: LD_INT 0
9118: ST_TO_ADDR
// enable ;
9119: ENABLE
// end ;
9120: END
// every 0 0$1 do var a ;
9121: GO 9123
9123: DISABLE
9124: LD_INT 0
9126: PPUSH
// begin a :=  ;
9127: LD_ADDR_VAR 0 1
9131: PUSH
9132: LD_STRING 
9134: ST_TO_ADDR
// if attacking then
9135: LD_EXP 38
9139: IFFALSE 9155
// a := a &  attacking ;
9141: LD_ADDR_VAR 0 1
9145: PUSH
9146: LD_VAR 0 1
9150: PUSH
9151: LD_STRING  attacking
9153: STR
9154: ST_TO_ADDR
// if first_attack then
9155: LD_EXP 33
9159: IFFALSE 9175
// a := a &  first ;
9161: LD_ADDR_VAR 0 1
9165: PUSH
9166: LD_VAR 0 1
9170: PUSH
9171: LD_STRING  first
9173: STR
9174: ST_TO_ADDR
// if mine_attack then
9175: LD_EXP 34
9179: IFFALSE 9195
// a := a &  mine ;
9181: LD_ADDR_VAR 0 1
9185: PUSH
9186: LD_VAR 0 1
9190: PUSH
9191: LD_STRING  mine
9193: STR
9194: ST_TO_ADDR
// if thief_attack then
9195: LD_EXP 35
9199: IFFALSE 9215
// a := a &  thief ;
9201: LD_ADDR_VAR 0 1
9205: PUSH
9206: LD_VAR 0 1
9210: PUSH
9211: LD_STRING  thief
9213: STR
9214: ST_TO_ADDR
// if lonely_attack then
9215: LD_EXP 36
9219: IFFALSE 9235
// a := a &  lonely ;
9221: LD_ADDR_VAR 0 1
9225: PUSH
9226: LD_VAR 0 1
9230: PUSH
9231: LD_STRING  lonely
9233: STR
9234: ST_TO_ADDR
// if next_attack then
9235: LD_EXP 37
9239: IFFALSE 9255
// a := a &  next ;
9241: LD_ADDR_VAR 0 1
9245: PUSH
9246: LD_VAR 0 1
9250: PUSH
9251: LD_STRING  next
9253: STR
9254: ST_TO_ADDR
// debug_strings := [ a ] ;
9255: LD_ADDR_OWVAR 48
9259: PUSH
9260: LD_VAR 0 1
9264: PUSH
9265: EMPTY
9266: LIST
9267: ST_TO_ADDR
// enable ;
9268: ENABLE
// end ;
9269: PPOPN 1
9271: END
// function F_first_attack ; var i , r , amici , x , y , units , a , b ; begin
9272: LD_INT 0
9274: PPUSH
9275: PPUSH
9276: PPUSH
9277: PPUSH
9278: PPUSH
9279: PPUSH
9280: PPUSH
9281: PPUSH
9282: PPUSH
// r := Rand ( 1 , CameFromXY ) ;
9283: LD_ADDR_VAR 0 3
9287: PUSH
9288: LD_INT 1
9290: PPUSH
9291: LD_EXP 27
9295: PPUSH
9296: CALL_OW 12
9300: ST_TO_ADDR
// x := CameFromXY [ r ] [ 1 ] ;
9301: LD_ADDR_VAR 0 5
9305: PUSH
9306: LD_EXP 27
9310: PUSH
9311: LD_VAR 0 3
9315: ARRAY
9316: PUSH
9317: LD_INT 1
9319: ARRAY
9320: ST_TO_ADDR
// y := CameFromXY [ r ] [ 2 ] ;
9321: LD_ADDR_VAR 0 6
9325: PUSH
9326: LD_EXP 27
9330: PUSH
9331: LD_VAR 0 3
9335: ARRAY
9336: PUSH
9337: LD_INT 2
9339: ARRAY
9340: ST_TO_ADDR
// units := 2 ;
9341: LD_ADDR_VAR 0 7
9345: PUSH
9346: LD_INT 2
9348: ST_TO_ADDR
// a := make_arabs ( units , class_soldier ) ;
9349: LD_ADDR_VAR 0 8
9353: PUSH
9354: LD_VAR 0 7
9358: PPUSH
9359: LD_INT 1
9361: PPUSH
9362: CALL 1092 0 2
9366: ST_TO_ADDR
// for i in a do
9367: LD_ADDR_VAR 0 2
9371: PUSH
9372: LD_VAR 0 8
9376: PUSH
9377: FOR_IN
9378: IFFALSE 9407
// PlaceUnitXYR ( i , x , y , 5 , false ) ;
9380: LD_VAR 0 2
9384: PPUSH
9385: LD_VAR 0 5
9389: PPUSH
9390: LD_VAR 0 6
9394: PPUSH
9395: LD_INT 5
9397: PPUSH
9398: LD_INT 0
9400: PPUSH
9401: CALL_OW 50
9405: GO 9377
9407: POP
9408: POP
// r := Rand ( 1 , CameFromXY ) ;
9409: LD_ADDR_VAR 0 3
9413: PUSH
9414: LD_INT 1
9416: PPUSH
9417: LD_EXP 27
9421: PPUSH
9422: CALL_OW 12
9426: ST_TO_ADDR
// x := CameFromXY [ r ] [ 1 ] ;
9427: LD_ADDR_VAR 0 5
9431: PUSH
9432: LD_EXP 27
9436: PUSH
9437: LD_VAR 0 3
9441: ARRAY
9442: PUSH
9443: LD_INT 1
9445: ARRAY
9446: ST_TO_ADDR
// y := CameFromXY [ r ] [ 2 ] ;
9447: LD_ADDR_VAR 0 6
9451: PUSH
9452: LD_EXP 27
9456: PUSH
9457: LD_VAR 0 3
9461: ARRAY
9462: PUSH
9463: LD_INT 2
9465: ARRAY
9466: ST_TO_ADDR
// units := difficulty + 1 ;
9467: LD_ADDR_VAR 0 7
9471: PUSH
9472: LD_OWVAR 67
9476: PUSH
9477: LD_INT 1
9479: PLUS
9480: ST_TO_ADDR
// b := make_arabs ( units , class_soldier ) ;
9481: LD_ADDR_VAR 0 9
9485: PUSH
9486: LD_VAR 0 7
9490: PPUSH
9491: LD_INT 1
9493: PPUSH
9494: CALL 1092 0 2
9498: ST_TO_ADDR
// for i in b do
9499: LD_ADDR_VAR 0 2
9503: PUSH
9504: LD_VAR 0 9
9508: PUSH
9509: FOR_IN
9510: IFFALSE 9539
// PlaceUnitXYR ( i , x , y , 5 , false ) ;
9512: LD_VAR 0 2
9516: PPUSH
9517: LD_VAR 0 5
9521: PPUSH
9522: LD_VAR 0 6
9526: PPUSH
9527: LD_INT 5
9529: PPUSH
9530: LD_INT 0
9532: PPUSH
9533: CALL_OW 50
9537: GO 9509
9539: POP
9540: POP
// amici_b := budovy ;
9541: LD_ADDR_LOC 7
9545: PUSH
9546: LD_EXP 63
9550: ST_TO_ADDR
// amici_h := FilterAllUnits ( [ f_side , you ] ) ;
9551: LD_ADDR_LOC 6
9555: PUSH
9556: LD_INT 22
9558: PUSH
9559: LD_EXP 1
9563: PUSH
9564: EMPTY
9565: LIST
9566: LIST
9567: PPUSH
9568: CALL_OW 69
9572: ST_TO_ADDR
// away_from_last_attack := 0 ;
9573: LD_ADDR_EXP 32
9577: PUSH
9578: LD_INT 0
9580: ST_TO_ADDR
// make_mess := a ^ b ;
9581: LD_ADDR_LOC 9
9585: PUSH
9586: LD_VAR 0 8
9590: PUSH
9591: LD_VAR 0 9
9595: ADD
9596: ST_TO_ADDR
// if amici_b then
9597: LD_LOC 7
9601: IFFALSE 9642
// ComAgressiveMove ( make_mess , GetX ( amici_b [ 1 ] ) , GetY ( amici_b [ 1 ] ) ) else
9603: LD_LOC 9
9607: PPUSH
9608: LD_LOC 7
9612: PUSH
9613: LD_INT 1
9615: ARRAY
9616: PPUSH
9617: CALL_OW 250
9621: PPUSH
9622: LD_LOC 7
9626: PUSH
9627: LD_INT 1
9629: ARRAY
9630: PPUSH
9631: CALL_OW 251
9635: PPUSH
9636: CALL_OW 114
9640: GO 9679
// ComAgressiveMove ( make_mess , GetX ( amici_h [ 1 ] ) , GetY ( amici_h [ 1 ] ) ) ;
9642: LD_LOC 9
9646: PPUSH
9647: LD_LOC 6
9651: PUSH
9652: LD_INT 1
9654: ARRAY
9655: PPUSH
9656: CALL_OW 250
9660: PPUSH
9661: LD_LOC 6
9665: PUSH
9666: LD_INT 1
9668: ARRAY
9669: PPUSH
9670: CALL_OW 251
9674: PPUSH
9675: CALL_OW 114
// was_first_attack := true ;
9679: LD_ADDR_EXP 31
9683: PUSH
9684: LD_INT 1
9686: ST_TO_ADDR
// first_attack := true ;
9687: LD_ADDR_EXP 33
9691: PUSH
9692: LD_INT 1
9694: ST_TO_ADDR
// while see_any ( you , make_mess ) do
9695: LD_EXP 1
9699: PPUSH
9700: LD_LOC 9
9704: PPUSH
9705: CALL 13837 0 2
9709: IFFALSE 9720
// wait ( 0 0$0.5 ) ;
9711: LD_INT 18
9713: PPUSH
9714: CALL_OW 67
9718: GO 9695
// amici := FilterAllUnits ( [ [ f_side , you ] , [ f_see , arabians ] ] ) ;
9720: LD_ADDR_VAR 0 4
9724: PUSH
9725: LD_INT 22
9727: PUSH
9728: LD_EXP 1
9732: PUSH
9733: EMPTY
9734: LIST
9735: LIST
9736: PUSH
9737: LD_INT 101
9739: PUSH
9740: LD_EXP 4
9744: PUSH
9745: EMPTY
9746: LIST
9747: LIST
9748: PUSH
9749: EMPTY
9750: LIST
9751: LIST
9752: PPUSH
9753: CALL_OW 69
9757: ST_TO_ADDR
// if amici then
9758: LD_VAR 0 4
9762: IFFALSE 9801
// begin ComAgressiveMove ( make_mess , GetX ( amici [ 1 ] ) , GetY ( amici [ 1 ] ) ) ;
9764: LD_LOC 9
9768: PPUSH
9769: LD_VAR 0 4
9773: PUSH
9774: LD_INT 1
9776: ARRAY
9777: PPUSH
9778: CALL_OW 250
9782: PPUSH
9783: LD_VAR 0 4
9787: PUSH
9788: LD_INT 1
9790: ARRAY
9791: PPUSH
9792: CALL_OW 251
9796: PPUSH
9797: CALL_OW 114
// end ; end ;
9801: LD_VAR 0 1
9805: RET
// var set_charge , make_mess ; function F_mine_attack ; var i , r , amici , x , y , units , w_b , amici_b ; begin
9806: LD_INT 0
9808: PPUSH
9809: PPUSH
9810: PPUSH
9811: PPUSH
9812: PPUSH
9813: PPUSH
9814: PPUSH
9815: PPUSH
9816: PPUSH
// r := Rand ( 1 , CameFromXY ) ;
9817: LD_ADDR_VAR 0 3
9821: PUSH
9822: LD_INT 1
9824: PPUSH
9825: LD_EXP 27
9829: PPUSH
9830: CALL_OW 12
9834: ST_TO_ADDR
// x := CameFromXY [ r ] [ 1 ] ;
9835: LD_ADDR_VAR 0 5
9839: PUSH
9840: LD_EXP 27
9844: PUSH
9845: LD_VAR 0 3
9849: ARRAY
9850: PUSH
9851: LD_INT 1
9853: ARRAY
9854: ST_TO_ADDR
// y := CameFromXY [ r ] [ 2 ] ;
9855: LD_ADDR_VAR 0 6
9859: PUSH
9860: LD_EXP 27
9864: PUSH
9865: LD_VAR 0 3
9869: ARRAY
9870: PUSH
9871: LD_INT 2
9873: ARRAY
9874: ST_TO_ADDR
// units := difficulty * 2 ;
9875: LD_ADDR_VAR 0 7
9879: PUSH
9880: LD_OWVAR 67
9884: PUSH
9885: LD_INT 2
9887: MUL
9888: ST_TO_ADDR
// amici_b := budovy ;
9889: LD_ADDR_VAR 0 9
9893: PUSH
9894: LD_EXP 63
9898: ST_TO_ADDR
// w_b := Rand ( 1 , ( amici_b + 0 ) ) ;
9899: LD_ADDR_VAR 0 8
9903: PUSH
9904: LD_INT 1
9906: PPUSH
9907: LD_VAR 0 9
9911: PUSH
9912: LD_INT 0
9914: PLUS
9915: PPUSH
9916: CALL_OW 12
9920: ST_TO_ADDR
// if amici_b then
9921: LD_VAR 0 9
9925: IFFALSE 10537
// begin make_mess := make_arabs ( units , class_soldier ) ;
9927: LD_ADDR_LOC 9
9931: PUSH
9932: LD_VAR 0 7
9936: PPUSH
9937: LD_INT 1
9939: PPUSH
9940: CALL 1092 0 2
9944: ST_TO_ADDR
// units := ( make_mess + 0 ) ;
9945: LD_ADDR_VAR 0 7
9949: PUSH
9950: LD_LOC 9
9954: PUSH
9955: LD_INT 0
9957: PLUS
9958: ST_TO_ADDR
// for i in make_mess do
9959: LD_ADDR_VAR 0 2
9963: PUSH
9964: LD_LOC 9
9968: PUSH
9969: FOR_IN
9970: IFFALSE 9999
// PlaceUnitXYR ( i , x , y , 5 , false ) ;
9972: LD_VAR 0 2
9976: PPUSH
9977: LD_VAR 0 5
9981: PPUSH
9982: LD_VAR 0 6
9986: PPUSH
9987: LD_INT 5
9989: PPUSH
9990: LD_INT 0
9992: PPUSH
9993: CALL_OW 50
9997: GO 9969
9999: POP
10000: POP
// away_from_last_attack := 0 ;
10001: LD_ADDR_EXP 32
10005: PUSH
10006: LD_INT 0
10008: ST_TO_ADDR
// set_charge := get_live_from_list ( make_mess , 0 , difficulty ) ;
10009: LD_ADDR_LOC 8
10013: PUSH
10014: LD_LOC 9
10018: PPUSH
10019: LD_INT 0
10021: PPUSH
10022: LD_OWVAR 67
10026: PPUSH
10027: CALL 13631 0 3
10031: ST_TO_ADDR
// make_mess := get_live_from_list ( make_mess , difficulty , units - difficulty ) ;
10032: LD_ADDR_LOC 9
10036: PUSH
10037: LD_LOC 9
10041: PPUSH
10042: LD_OWVAR 67
10046: PPUSH
10047: LD_VAR 0 7
10051: PUSH
10052: LD_OWVAR 67
10056: MINUS
10057: PPUSH
10058: CALL 13631 0 3
10062: ST_TO_ADDR
// ComAgressiveMove ( make_mess , GetX ( amici_b [ w_b ] ) , GetY ( amici_b [ w_b ] ) ) ;
10063: LD_LOC 9
10067: PPUSH
10068: LD_VAR 0 9
10072: PUSH
10073: LD_VAR 0 8
10077: ARRAY
10078: PPUSH
10079: CALL_OW 250
10083: PPUSH
10084: LD_VAR 0 9
10088: PUSH
10089: LD_VAR 0 8
10093: ARRAY
10094: PPUSH
10095: CALL_OW 251
10099: PPUSH
10100: CALL_OW 114
// find_easiest_way ( GetX ( amici_b [ w_b ] ) , GetY ( amici_b [ w_b ] ) , 7 , 3 , set_charge , you , false ) ;
10104: LD_VAR 0 9
10108: PUSH
10109: LD_VAR 0 8
10113: ARRAY
10114: PPUSH
10115: CALL_OW 250
10119: PPUSH
10120: LD_VAR 0 9
10124: PUSH
10125: LD_VAR 0 8
10129: ARRAY
10130: PPUSH
10131: CALL_OW 251
10135: PPUSH
10136: LD_INT 7
10138: PPUSH
10139: LD_INT 3
10141: PPUSH
10142: LD_LOC 8
10146: PPUSH
10147: LD_EXP 1
10151: PPUSH
10152: LD_INT 0
10154: PPUSH
10155: CALL 12259 0 7
// AddComPlaceDelayedCharge ( set_charge , GetX ( amici_b [ w_b ] ) , GetY ( amici_b [ w_b ] ) , amici_b [ w_b ] ) ;
10159: LD_LOC 8
10163: PPUSH
10164: LD_VAR 0 9
10168: PUSH
10169: LD_VAR 0 8
10173: ARRAY
10174: PPUSH
10175: CALL_OW 250
10179: PPUSH
10180: LD_VAR 0 9
10184: PUSH
10185: LD_VAR 0 8
10189: ARRAY
10190: PPUSH
10191: CALL_OW 251
10195: PPUSH
10196: LD_VAR 0 9
10200: PUSH
10201: LD_VAR 0 8
10205: ARRAY
10206: PPUSH
10207: CALL_OW 192
// evade_shortest_way_from_xy ( GetX ( amici_b [ w_b ] ) , GetY ( amici_b [ w_b ] ) , set_charge , true , true ) ;
10211: LD_VAR 0 9
10215: PUSH
10216: LD_VAR 0 8
10220: ARRAY
10221: PPUSH
10222: CALL_OW 250
10226: PPUSH
10227: LD_VAR 0 9
10231: PUSH
10232: LD_VAR 0 8
10236: ARRAY
10237: PPUSH
10238: CALL_OW 251
10242: PPUSH
10243: LD_LOC 8
10247: PPUSH
10248: LD_INT 1
10250: PPUSH
10251: LD_INT 1
10253: PPUSH
10254: CALL 12888 0 5
// mine_attack := true ;
10258: LD_ADDR_EXP 34
10262: PUSH
10263: LD_INT 1
10265: ST_TO_ADDR
// while not see_any ( you , make_mess ) do
10266: LD_EXP 1
10270: PPUSH
10271: LD_LOC 9
10275: PPUSH
10276: CALL 13837 0 2
10280: NOT
10281: IFFALSE 10292
// wait ( 0 0$0.5 ) ;
10283: LD_INT 18
10285: PPUSH
10286: CALL_OW 67
10290: GO 10266
// amici := FilterAllUnits ( [ [ f_side , you ] , [ f_see , arabians ] , [ f_type , unit_human ] ] ) ;
10292: LD_ADDR_VAR 0 4
10296: PUSH
10297: LD_INT 22
10299: PUSH
10300: LD_EXP 1
10304: PUSH
10305: EMPTY
10306: LIST
10307: LIST
10308: PUSH
10309: LD_INT 101
10311: PUSH
10312: LD_EXP 4
10316: PUSH
10317: EMPTY
10318: LIST
10319: LIST
10320: PUSH
10321: LD_INT 21
10323: PUSH
10324: LD_INT 1
10326: PUSH
10327: EMPTY
10328: LIST
10329: LIST
10330: PUSH
10331: EMPTY
10332: LIST
10333: LIST
10334: LIST
10335: PPUSH
10336: CALL_OW 69
10340: ST_TO_ADDR
// if amici then
10341: LD_VAR 0 4
10345: IFFALSE 10464
// begin ComAgressiveMove ( make_mess , GetX ( amici [ 1 ] ) , GetY ( amici [ 1 ] ) ) ;
10347: LD_LOC 9
10351: PPUSH
10352: LD_VAR 0 4
10356: PUSH
10357: LD_INT 1
10359: ARRAY
10360: PPUSH
10361: CALL_OW 250
10365: PPUSH
10366: LD_VAR 0 4
10370: PUSH
10371: LD_INT 1
10373: ARRAY
10374: PPUSH
10375: CALL_OW 251
10379: PPUSH
10380: CALL_OW 114
// for i := 1 to amici do
10384: LD_ADDR_VAR 0 2
10388: PUSH
10389: DOUBLE
10390: LD_INT 1
10392: DEC
10393: ST_TO_ADDR
10394: LD_VAR 0 4
10398: PUSH
10399: FOR_TO
10400: IFFALSE 10445
// begin AddComAgressiveMove ( make_mess , GetX ( amici [ i ] ) , GetY ( amici [ i ] ) ) ;
10402: LD_LOC 9
10406: PPUSH
10407: LD_VAR 0 4
10411: PUSH
10412: LD_VAR 0 2
10416: ARRAY
10417: PPUSH
10418: CALL_OW 250
10422: PPUSH
10423: LD_VAR 0 4
10427: PUSH
10428: LD_VAR 0 2
10432: ARRAY
10433: PPUSH
10434: CALL_OW 251
10438: PPUSH
10439: CALL_OW 174
// end ;
10443: GO 10399
10445: POP
10446: POP
// evade_shortest_way ( make_mess , true , true ) ;
10447: LD_LOC 9
10451: PPUSH
10452: LD_INT 1
10454: PPUSH
10455: LD_INT 1
10457: PPUSH
10458: CALL 12801 0 3
// end else
10462: GO 10537
// begin if IsOk ( amici_b [ w_b ] ) then
10464: LD_VAR 0 9
10468: PUSH
10469: LD_VAR 0 8
10473: ARRAY
10474: PPUSH
10475: CALL_OW 302
10479: IFFALSE 10522
// ComAgressiveMove ( make_mess , GetX ( amici_b [ w_b ] ) , GetY ( amici_b [ w_b ] ) ) ;
10481: LD_LOC 9
10485: PPUSH
10486: LD_VAR 0 9
10490: PUSH
10491: LD_VAR 0 8
10495: ARRAY
10496: PPUSH
10497: CALL_OW 250
10501: PPUSH
10502: LD_VAR 0 9
10506: PUSH
10507: LD_VAR 0 8
10511: ARRAY
10512: PPUSH
10513: CALL_OW 251
10517: PPUSH
10518: CALL_OW 114
// evade_shortest_way ( make_mess , true , true ) ;
10522: LD_LOC 9
10526: PPUSH
10527: LD_INT 1
10529: PPUSH
10530: LD_INT 1
10532: PPUSH
10533: CALL 12801 0 3
// end ; end ; end ;
10537: LD_VAR 0 1
10541: RET
// var capcar1 , capcar2 ; var steal_car ; function F_thief_attack ; var i , r , x , y , units , amici3 ; begin
10542: LD_INT 0
10544: PPUSH
10545: PPUSH
10546: PPUSH
10547: PPUSH
10548: PPUSH
10549: PPUSH
10550: PPUSH
// r := Rand ( 1 , CameFromXY ) ;
10551: LD_ADDR_VAR 0 3
10555: PUSH
10556: LD_INT 1
10558: PPUSH
10559: LD_EXP 27
10563: PPUSH
10564: CALL_OW 12
10568: ST_TO_ADDR
// x := CameFromXY [ r ] [ 1 ] ;
10569: LD_ADDR_VAR 0 4
10573: PUSH
10574: LD_EXP 27
10578: PUSH
10579: LD_VAR 0 3
10583: ARRAY
10584: PUSH
10585: LD_INT 1
10587: ARRAY
10588: ST_TO_ADDR
// y := CameFromXY [ r ] [ 2 ] ;
10589: LD_ADDR_VAR 0 5
10593: PUSH
10594: LD_EXP 27
10598: PUSH
10599: LD_VAR 0 3
10603: ARRAY
10604: PUSH
10605: LD_INT 2
10607: ARRAY
10608: ST_TO_ADDR
// units := 3 + difficulty + attacky div 7 + away_from_last_attack div 4 ;
10609: LD_ADDR_VAR 0 6
10613: PUSH
10614: LD_INT 3
10616: PUSH
10617: LD_OWVAR 67
10621: PLUS
10622: PUSH
10623: LD_EXP 39
10627: PUSH
10628: LD_INT 7
10630: DIV
10631: PLUS
10632: PUSH
10633: LD_EXP 32
10637: PUSH
10638: LD_INT 4
10640: DIV
10641: PLUS
10642: ST_TO_ADDR
// amici_v := FilterAllUnits ( [ [ f_type , unit_vehicle ] , [ f_side , you ] ] ) ;
10643: LD_ADDR_LOC 5
10647: PUSH
10648: LD_INT 21
10650: PUSH
10651: LD_INT 2
10653: PUSH
10654: EMPTY
10655: LIST
10656: LIST
10657: PUSH
10658: LD_INT 22
10660: PUSH
10661: LD_EXP 1
10665: PUSH
10666: EMPTY
10667: LIST
10668: LIST
10669: PUSH
10670: EMPTY
10671: LIST
10672: LIST
10673: PPUSH
10674: CALL_OW 69
10678: ST_TO_ADDR
// if amici_v then
10679: LD_LOC 5
10683: IFFALSE 11281
// begin make_mess := make_arabs ( units , class_soldier ) ;
10685: LD_ADDR_LOC 9
10689: PUSH
10690: LD_VAR 0 6
10694: PPUSH
10695: LD_INT 1
10697: PPUSH
10698: CALL 1092 0 2
10702: ST_TO_ADDR
// units := ( make_mess + 0 ) ;
10703: LD_ADDR_VAR 0 6
10707: PUSH
10708: LD_LOC 9
10712: PUSH
10713: LD_INT 0
10715: PLUS
10716: ST_TO_ADDR
// for i in make_mess do
10717: LD_ADDR_VAR 0 2
10721: PUSH
10722: LD_LOC 9
10726: PUSH
10727: FOR_IN
10728: IFFALSE 10757
// PlaceUnitXYR ( i , x , y , 5 , false ) ;
10730: LD_VAR 0 2
10734: PPUSH
10735: LD_VAR 0 4
10739: PPUSH
10740: LD_VAR 0 5
10744: PPUSH
10745: LD_INT 5
10747: PPUSH
10748: LD_INT 0
10750: PPUSH
10751: CALL_OW 50
10755: GO 10727
10757: POP
10758: POP
// away_from_last_attack := 0 ;
10759: LD_ADDR_EXP 32
10763: PUSH
10764: LD_INT 0
10766: ST_TO_ADDR
// if difficulty > 1 then
10767: LD_OWVAR 67
10771: PUSH
10772: LD_INT 1
10774: GREATER
10775: IFFALSE 10827
// begin steal_car := get_live_from_list ( make_mess , 0 , 2 ) ;
10777: LD_ADDR_LOC 12
10781: PUSH
10782: LD_LOC 9
10786: PPUSH
10787: LD_INT 0
10789: PPUSH
10790: LD_INT 2
10792: PPUSH
10793: CALL 13631 0 3
10797: ST_TO_ADDR
// make_mess := get_live_from_list ( make_mess , 2 , units - 2 ) ;
10798: LD_ADDR_LOC 9
10802: PUSH
10803: LD_LOC 9
10807: PPUSH
10808: LD_INT 2
10810: PPUSH
10811: LD_VAR 0 6
10815: PUSH
10816: LD_INT 2
10818: MINUS
10819: PPUSH
10820: CALL 13631 0 3
10824: ST_TO_ADDR
// end else
10825: GO 10875
// begin steal_car := get_live_from_list ( make_mess , 0 , 1 ) ;
10827: LD_ADDR_LOC 12
10831: PUSH
10832: LD_LOC 9
10836: PPUSH
10837: LD_INT 0
10839: PPUSH
10840: LD_INT 1
10842: PPUSH
10843: CALL 13631 0 3
10847: ST_TO_ADDR
// make_mess := get_live_from_list ( make_mess , 1 , units - 1 ) ;
10848: LD_ADDR_LOC 9
10852: PUSH
10853: LD_LOC 9
10857: PPUSH
10858: LD_INT 1
10860: PPUSH
10861: LD_VAR 0 6
10865: PUSH
10866: LD_INT 1
10868: MINUS
10869: PPUSH
10870: CALL 13631 0 3
10874: ST_TO_ADDR
// end ; ComAgressiveMove ( make_mess , GetX ( amici_v [ 1 ] ) , GetY ( amici_v [ 1 ] ) ) ;
10875: LD_LOC 9
10879: PPUSH
10880: LD_LOC 5
10884: PUSH
10885: LD_INT 1
10887: ARRAY
10888: PPUSH
10889: CALL_OW 250
10893: PPUSH
10894: LD_LOC 5
10898: PUSH
10899: LD_INT 1
10901: ARRAY
10902: PPUSH
10903: CALL_OW 251
10907: PPUSH
10908: CALL_OW 114
// find_easiest_way ( GetX ( amici_v [ 1 ] ) , GetY ( amici_v [ 1 ] ) , 7 , 3 , steal_car , you , false ) ;
10912: LD_LOC 5
10916: PUSH
10917: LD_INT 1
10919: ARRAY
10920: PPUSH
10921: CALL_OW 250
10925: PPUSH
10926: LD_LOC 5
10930: PUSH
10931: LD_INT 1
10933: ARRAY
10934: PPUSH
10935: CALL_OW 251
10939: PPUSH
10940: LD_INT 7
10942: PPUSH
10943: LD_INT 3
10945: PPUSH
10946: LD_LOC 12
10950: PPUSH
10951: LD_EXP 1
10955: PPUSH
10956: LD_INT 0
10958: PPUSH
10959: CALL 12259 0 7
// com_queue := true ;
10963: LD_ADDR_OWVAR 49
10967: PUSH
10968: LD_INT 1
10970: ST_TO_ADDR
// AddComEnterUnit ( steal_car , amici_v [ 1 ] ) ;
10971: LD_LOC 12
10975: PPUSH
10976: LD_LOC 5
10980: PUSH
10981: LD_INT 1
10983: ARRAY
10984: PPUSH
10985: CALL_OW 180
// com_queue := false ;
10989: LD_ADDR_OWVAR 49
10993: PUSH
10994: LD_INT 0
10996: ST_TO_ADDR
// evade_shortest_way_from_xy ( GetX ( amici_v [ 1 ] ) , GetY ( amici_v [ 1 ] ) , steal_car , true , true ) ;
10997: LD_LOC 5
11001: PUSH
11002: LD_INT 1
11004: ARRAY
11005: PPUSH
11006: CALL_OW 250
11010: PPUSH
11011: LD_LOC 5
11015: PUSH
11016: LD_INT 1
11018: ARRAY
11019: PPUSH
11020: CALL_OW 251
11024: PPUSH
11025: LD_LOC 12
11029: PPUSH
11030: LD_INT 1
11032: PPUSH
11033: LD_INT 1
11035: PPUSH
11036: CALL 12888 0 5
// thief_attack := true ;
11040: LD_ADDR_EXP 35
11044: PUSH
11045: LD_INT 1
11047: ST_TO_ADDR
// while not see_any ( you , make_mess ) do
11048: LD_EXP 1
11052: PPUSH
11053: LD_LOC 9
11057: PPUSH
11058: CALL 13837 0 2
11062: NOT
11063: IFFALSE 11074
// wait ( 0 0$0.5 ) ;
11065: LD_INT 18
11067: PPUSH
11068: CALL_OW 67
11072: GO 11048
// amici_b := FilterAllUnits ( [ f_type , unit_building ] ) ;
11074: LD_ADDR_LOC 7
11078: PUSH
11079: LD_INT 21
11081: PUSH
11082: LD_INT 3
11084: PUSH
11085: EMPTY
11086: LIST
11087: LIST
11088: PPUSH
11089: CALL_OW 69
11093: ST_TO_ADDR
// amici3 := FilterAllUnits ( [ [ f_side , you ] , [ f_see , arabians ] , [ f_type , unit_human ] ] ) ;
11094: LD_ADDR_VAR 0 7
11098: PUSH
11099: LD_INT 22
11101: PUSH
11102: LD_EXP 1
11106: PUSH
11107: EMPTY
11108: LIST
11109: LIST
11110: PUSH
11111: LD_INT 101
11113: PUSH
11114: LD_EXP 4
11118: PUSH
11119: EMPTY
11120: LIST
11121: LIST
11122: PUSH
11123: LD_INT 21
11125: PUSH
11126: LD_INT 1
11128: PUSH
11129: EMPTY
11130: LIST
11131: LIST
11132: PUSH
11133: EMPTY
11134: LIST
11135: LIST
11136: LIST
11137: PPUSH
11138: CALL_OW 69
11142: ST_TO_ADDR
// if amici3 then
11143: LD_VAR 0 7
11147: IFFALSE 11242
// begin ComAttackUnit ( make_mess , amici3 [ 1 ] ) ;
11149: LD_LOC 9
11153: PPUSH
11154: LD_VAR 0 7
11158: PUSH
11159: LD_INT 1
11161: ARRAY
11162: PPUSH
11163: CALL_OW 115
// for i := 2 to amici3 do
11167: LD_ADDR_VAR 0 2
11171: PUSH
11172: DOUBLE
11173: LD_INT 2
11175: DEC
11176: ST_TO_ADDR
11177: LD_VAR 0 7
11181: PUSH
11182: FOR_TO
11183: IFFALSE 11223
// begin com_queue := true ;
11185: LD_ADDR_OWVAR 49
11189: PUSH
11190: LD_INT 1
11192: ST_TO_ADDR
// ComAttackUnit ( make_mess , amici3 [ i ] ) ;
11193: LD_LOC 9
11197: PPUSH
11198: LD_VAR 0 7
11202: PUSH
11203: LD_VAR 0 2
11207: ARRAY
11208: PPUSH
11209: CALL_OW 115
// com_queue := false ;
11213: LD_ADDR_OWVAR 49
11217: PUSH
11218: LD_INT 0
11220: ST_TO_ADDR
// end ;
11221: GO 11182
11223: POP
11224: POP
// evade_shortest_way ( make_mess , true , true ) ;
11225: LD_LOC 9
11229: PPUSH
11230: LD_INT 1
11232: PPUSH
11233: LD_INT 1
11235: PPUSH
11236: CALL 12801 0 3
// end else
11240: GO 11281
// begin if amici_b then
11242: LD_LOC 7
11246: IFFALSE 11266
// ComAttackUnit ( make_mess , amici_b [ 1 ] ) ;
11248: LD_LOC 9
11252: PPUSH
11253: LD_LOC 7
11257: PUSH
11258: LD_INT 1
11260: ARRAY
11261: PPUSH
11262: CALL_OW 115
// evade_shortest_way ( make_mess , true , true ) ;
11266: LD_LOC 9
11270: PPUSH
11271: LD_INT 1
11273: PPUSH
11274: LD_INT 1
11276: PPUSH
11277: CALL 12801 0 3
// end ; end ; end ;
11281: LD_VAR 0 1
11285: RET
// function F_lonely_attack ( daleko ) ; var i , r , x , y , units ; begin
11286: LD_INT 0
11288: PPUSH
11289: PPUSH
11290: PPUSH
11291: PPUSH
11292: PPUSH
11293: PPUSH
// r := Rand ( 1 , CameFromXY ) ;
11294: LD_ADDR_VAR 0 4
11298: PUSH
11299: LD_INT 1
11301: PPUSH
11302: LD_EXP 27
11306: PPUSH
11307: CALL_OW 12
11311: ST_TO_ADDR
// x := CameFromXY [ r ] [ 1 ] ;
11312: LD_ADDR_VAR 0 5
11316: PUSH
11317: LD_EXP 27
11321: PUSH
11322: LD_VAR 0 4
11326: ARRAY
11327: PUSH
11328: LD_INT 1
11330: ARRAY
11331: ST_TO_ADDR
// y := CameFromXY [ r ] [ 2 ] ;
11332: LD_ADDR_VAR 0 6
11336: PUSH
11337: LD_EXP 27
11341: PUSH
11342: LD_VAR 0 4
11346: ARRAY
11347: PUSH
11348: LD_INT 2
11350: ARRAY
11351: ST_TO_ADDR
// units := 1 + difficulty ;
11352: LD_ADDR_VAR 0 7
11356: PUSH
11357: LD_INT 1
11359: PUSH
11360: LD_OWVAR 67
11364: PLUS
11365: ST_TO_ADDR
// if daleko then
11366: LD_VAR 0 1
11370: IFFALSE 11634
// begin make_mess := make_arabs ( units , class_soldier ) ;
11372: LD_ADDR_LOC 9
11376: PUSH
11377: LD_VAR 0 7
11381: PPUSH
11382: LD_INT 1
11384: PPUSH
11385: CALL 1092 0 2
11389: ST_TO_ADDR
// units := ( make_mess + 0 ) ;
11390: LD_ADDR_VAR 0 7
11394: PUSH
11395: LD_LOC 9
11399: PUSH
11400: LD_INT 0
11402: PLUS
11403: ST_TO_ADDR
// for i in make_mess do
11404: LD_ADDR_VAR 0 3
11408: PUSH
11409: LD_LOC 9
11413: PUSH
11414: FOR_IN
11415: IFFALSE 11444
// PlaceUnitXYR ( i , x , y , 5 , false ) ;
11417: LD_VAR 0 3
11421: PPUSH
11422: LD_VAR 0 5
11426: PPUSH
11427: LD_VAR 0 6
11431: PPUSH
11432: LD_INT 5
11434: PPUSH
11435: LD_INT 0
11437: PPUSH
11438: CALL_OW 50
11442: GO 11414
11444: POP
11445: POP
// away_from_last_attack := 0 ;
11446: LD_ADDR_EXP 32
11450: PUSH
11451: LD_INT 0
11453: ST_TO_ADDR
// make_mess := make_mess ;
11454: LD_ADDR_LOC 9
11458: PUSH
11459: LD_LOC 9
11463: ST_TO_ADDR
// find_easiest_way ( GetX ( daleko [ 1 ] ) , GetY ( daleko [ 1 ] ) , 7 , 3 , make_mess , you , true ) ;
11464: LD_VAR 0 1
11468: PUSH
11469: LD_INT 1
11471: ARRAY
11472: PPUSH
11473: CALL_OW 250
11477: PPUSH
11478: LD_VAR 0 1
11482: PUSH
11483: LD_INT 1
11485: ARRAY
11486: PPUSH
11487: CALL_OW 251
11491: PPUSH
11492: LD_INT 7
11494: PPUSH
11495: LD_INT 3
11497: PPUSH
11498: LD_LOC 9
11502: PPUSH
11503: LD_EXP 1
11507: PPUSH
11508: LD_INT 1
11510: PPUSH
11511: CALL 12259 0 7
// AddComAttackUnit ( make_mess , daleko [ 1 ] ) ;
11515: LD_LOC 9
11519: PPUSH
11520: LD_VAR 0 1
11524: PUSH
11525: LD_INT 1
11527: ARRAY
11528: PPUSH
11529: CALL_OW 175
// if daleko >= 2 then
11533: LD_VAR 0 1
11537: PUSH
11538: LD_INT 2
11540: GREATEREQUAL
11541: IFFALSE 11589
// begin AddComAttackUnit ( make_mess , daleko [ 2 ] ) ;
11543: LD_LOC 9
11547: PPUSH
11548: LD_VAR 0 1
11552: PUSH
11553: LD_INT 2
11555: ARRAY
11556: PPUSH
11557: CALL_OW 175
// if daleko >= 3 then
11561: LD_VAR 0 1
11565: PUSH
11566: LD_INT 3
11568: GREATEREQUAL
11569: IFFALSE 11589
// begin AddComAttackUnit ( make_mess , daleko [ 3 ] ) ;
11571: LD_LOC 9
11575: PPUSH
11576: LD_VAR 0 1
11580: PUSH
11581: LD_INT 3
11583: ARRAY
11584: PPUSH
11585: CALL_OW 175
// end ; end ; evade_shortest_way ( make_mess , true , true ) ;
11589: LD_LOC 9
11593: PPUSH
11594: LD_INT 1
11596: PPUSH
11597: LD_INT 1
11599: PPUSH
11600: CALL 12801 0 3
// attacky := attacky + 1 ;
11604: LD_ADDR_EXP 39
11608: PUSH
11609: LD_EXP 39
11613: PUSH
11614: LD_INT 1
11616: PLUS
11617: ST_TO_ADDR
// lonely_attack := true ;
11618: LD_ADDR_EXP 36
11622: PUSH
11623: LD_INT 1
11625: ST_TO_ADDR
// attacking := true ;
11626: LD_ADDR_EXP 38
11630: PUSH
11631: LD_INT 1
11633: ST_TO_ADDR
// end ; end ;
11634: LD_VAR 0 2
11638: RET
// function F_next_attack ; var i , a , r , x , y , units , amici ; begin
11639: LD_INT 0
11641: PPUSH
11642: PPUSH
11643: PPUSH
11644: PPUSH
11645: PPUSH
11646: PPUSH
11647: PPUSH
11648: PPUSH
// r := Rand ( 1 , CameFromXY ) ;
11649: LD_ADDR_VAR 0 4
11653: PUSH
11654: LD_INT 1
11656: PPUSH
11657: LD_EXP 27
11661: PPUSH
11662: CALL_OW 12
11666: ST_TO_ADDR
// x := CameFromXY [ r ] [ 1 ] ;
11667: LD_ADDR_VAR 0 5
11671: PUSH
11672: LD_EXP 27
11676: PUSH
11677: LD_VAR 0 4
11681: ARRAY
11682: PUSH
11683: LD_INT 1
11685: ARRAY
11686: ST_TO_ADDR
// y := CameFromXY [ r ] [ 2 ] ;
11687: LD_ADDR_VAR 0 6
11691: PUSH
11692: LD_EXP 27
11696: PUSH
11697: LD_VAR 0 4
11701: ARRAY
11702: PUSH
11703: LD_INT 2
11705: ARRAY
11706: ST_TO_ADDR
// units := 2 + difficulty + away_from_last_attack div 8 + attacky div 8 ;
11707: LD_ADDR_VAR 0 7
11711: PUSH
11712: LD_INT 2
11714: PUSH
11715: LD_OWVAR 67
11719: PLUS
11720: PUSH
11721: LD_EXP 32
11725: PUSH
11726: LD_INT 8
11728: DIV
11729: PLUS
11730: PUSH
11731: LD_EXP 39
11735: PUSH
11736: LD_INT 8
11738: DIV
11739: PLUS
11740: ST_TO_ADDR
// make_mess := make_arabs ( units , class_soldier ) ;
11741: LD_ADDR_LOC 9
11745: PUSH
11746: LD_VAR 0 7
11750: PPUSH
11751: LD_INT 1
11753: PPUSH
11754: CALL 1092 0 2
11758: ST_TO_ADDR
// units := ( make_mess + 0 ) ;
11759: LD_ADDR_VAR 0 7
11763: PUSH
11764: LD_LOC 9
11768: PUSH
11769: LD_INT 0
11771: PLUS
11772: ST_TO_ADDR
// for i in make_mess do
11773: LD_ADDR_VAR 0 2
11777: PUSH
11778: LD_LOC 9
11782: PUSH
11783: FOR_IN
11784: IFFALSE 11813
// PlaceUnitXYR ( i , x , y , 5 , false ) ;
11786: LD_VAR 0 2
11790: PPUSH
11791: LD_VAR 0 5
11795: PPUSH
11796: LD_VAR 0 6
11800: PPUSH
11801: LD_INT 5
11803: PPUSH
11804: LD_INT 0
11806: PPUSH
11807: CALL_OW 50
11811: GO 11783
11813: POP
11814: POP
// away_from_last_attack := 0 ;
11815: LD_ADDR_EXP 32
11819: PUSH
11820: LD_INT 0
11822: ST_TO_ADDR
// make_mess := make_mess ;
11823: LD_ADDR_LOC 9
11827: PUSH
11828: LD_LOC 9
11832: ST_TO_ADDR
// a := Rand ( 1 , budovy ) ;
11833: LD_ADDR_VAR 0 3
11837: PUSH
11838: LD_INT 1
11840: PPUSH
11841: LD_EXP 63
11845: PPUSH
11846: CALL_OW 12
11850: ST_TO_ADDR
// if budovy then
11851: LD_EXP 63
11855: IFFALSE 11900
// ComAgressiveMove ( make_mess , GetX ( budovy [ a ] ) , GetY ( budovy [ a ] ) ) else
11857: LD_LOC 9
11861: PPUSH
11862: LD_EXP 63
11866: PUSH
11867: LD_VAR 0 3
11871: ARRAY
11872: PPUSH
11873: CALL_OW 250
11877: PPUSH
11878: LD_EXP 63
11882: PUSH
11883: LD_VAR 0 3
11887: ARRAY
11888: PPUSH
11889: CALL_OW 251
11893: PPUSH
11894: CALL_OW 114
11898: GO 11937
// ComAgressiveMove ( make_mess , GetX ( tvoji_lidi [ 1 ] ) , GetY ( tvoji_lidi [ 1 ] ) ) ;
11900: LD_LOC 9
11904: PPUSH
11905: LD_EXP 47
11909: PUSH
11910: LD_INT 1
11912: ARRAY
11913: PPUSH
11914: CALL_OW 250
11918: PPUSH
11919: LD_EXP 47
11923: PUSH
11924: LD_INT 1
11926: ARRAY
11927: PPUSH
11928: CALL_OW 251
11932: PPUSH
11933: CALL_OW 114
// next_attack := true ;
11937: LD_ADDR_EXP 37
11941: PUSH
11942: LD_INT 1
11944: ST_TO_ADDR
// attacky := attacky + 1 ;
11945: LD_ADDR_EXP 39
11949: PUSH
11950: LD_EXP 39
11954: PUSH
11955: LD_INT 1
11957: PLUS
11958: ST_TO_ADDR
// attacking := true ;
11959: LD_ADDR_EXP 38
11963: PUSH
11964: LD_INT 1
11966: ST_TO_ADDR
// while not see_any ( you , make_mess ) do
11967: LD_EXP 1
11971: PPUSH
11972: LD_LOC 9
11976: PPUSH
11977: CALL 13837 0 2
11981: NOT
11982: IFFALSE 11993
// wait ( 0 0$0.5 ) ;
11984: LD_INT 18
11986: PPUSH
11987: CALL_OW 67
11991: GO 11967
// amici := FilterAllUnits ( [ [ f_side , you ] , [ f_see , arabians ] ] ) ;
11993: LD_ADDR_VAR 0 8
11997: PUSH
11998: LD_INT 22
12000: PUSH
12001: LD_EXP 1
12005: PUSH
12006: EMPTY
12007: LIST
12008: LIST
12009: PUSH
12010: LD_INT 101
12012: PUSH
12013: LD_EXP 4
12017: PUSH
12018: EMPTY
12019: LIST
12020: LIST
12021: PUSH
12022: EMPTY
12023: LIST
12024: LIST
12025: PPUSH
12026: CALL_OW 69
12030: ST_TO_ADDR
// if amici then
12031: LD_VAR 0 8
12035: IFFALSE 12076
// begin ComAgressiveMove ( make_mess , GetX ( amici [ 1 ] ) , GetY ( amici [ 1 ] ) ) ;
12037: LD_LOC 9
12041: PPUSH
12042: LD_VAR 0 8
12046: PUSH
12047: LD_INT 1
12049: ARRAY
12050: PPUSH
12051: CALL_OW 250
12055: PPUSH
12056: LD_VAR 0 8
12060: PUSH
12061: LD_INT 1
12063: ARRAY
12064: PPUSH
12065: CALL_OW 251
12069: PPUSH
12070: CALL_OW 114
// end else
12074: GO 12107
// begin ComMoveXY ( make_mess , x , y ) ;
12076: LD_LOC 9
12080: PPUSH
12081: LD_VAR 0 5
12085: PPUSH
12086: LD_VAR 0 6
12090: PPUSH
12091: CALL_OW 111
// AddComMoveToArea ( make_mess , border ) ;
12095: LD_LOC 9
12099: PPUSH
12100: LD_INT 7
12102: PPUSH
12103: CALL_OW 173
// end ; end ;
12107: LD_VAR 0 1
12111: RET
// every 0 0$1.0 do
12112: GO 12114
12114: DISABLE
// begin enter_near_vehicle ( make_mess , 4 , FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_vehicle ] ] ) ) ;
12115: LD_LOC 9
12119: PPUSH
12120: LD_INT 4
12122: PPUSH
12123: LD_INT 22
12125: PUSH
12126: LD_EXP 1
12130: PUSH
12131: EMPTY
12132: LIST
12133: LIST
12134: PUSH
12135: LD_INT 21
12137: PUSH
12138: LD_INT 2
12140: PUSH
12141: EMPTY
12142: LIST
12143: LIST
12144: PUSH
12145: EMPTY
12146: LIST
12147: LIST
12148: PPUSH
12149: CALL_OW 69
12153: PPUSH
12154: CALL 13908 0 3
// arabs_cars := FilterAllUnits ( [ [ f_type , unit_vehicle ] , [ f_side , arabians ] ] ) ;
12158: LD_ADDR_EXP 9
12162: PUSH
12163: LD_INT 21
12165: PUSH
12166: LD_INT 2
12168: PUSH
12169: EMPTY
12170: LIST
12171: LIST
12172: PUSH
12173: LD_INT 22
12175: PUSH
12176: LD_EXP 4
12180: PUSH
12181: EMPTY
12182: LIST
12183: LIST
12184: PUSH
12185: EMPTY
12186: LIST
12187: LIST
12188: PPUSH
12189: CALL_OW 69
12193: ST_TO_ADDR
// if arabs_cars then
12194: LD_EXP 9
12198: IFFALSE 12257
// begin if GetWeapon ( arabs_cars [ 1 ] ) <> us_cargo_bay then
12200: LD_EXP 9
12204: PUSH
12205: LD_INT 1
12207: ARRAY
12208: PPUSH
12209: CALL_OW 264
12213: PUSH
12214: LD_INT 12
12216: NONEQUAL
12217: IFFALSE 12245
// begin ComWait ( arabs_cars , 0 0$12 ) ;
12219: LD_EXP 9
12223: PPUSH
12224: LD_INT 420
12226: PPUSH
12227: CALL_OW 142
// AddComMoveToArea ( arabs_cars , border ) ;
12231: LD_EXP 9
12235: PPUSH
12236: LD_INT 7
12238: PPUSH
12239: CALL_OW 173
// end else
12243: GO 12257
// ComMoveToArea ( arabs_cars , border ) ;
12245: LD_EXP 9
12249: PPUSH
12250: LD_INT 7
12252: PPUSH
12253: CALL_OW 113
// end ; enable ;
12257: ENABLE
// end ; end_of_file
12258: END
// export function find_easiest_way ( px , py , hloubka , krok , for_units , host_side , queue ) ; var x , y ; var x2 , y2 ; var lx , ly ; var howgood , smer ; var i2 , j2 , size2 ; var hsee , kolem ; var for_unit ; begin
12259: LD_INT 0
12261: PPUSH
12262: PPUSH
12263: PPUSH
12264: PPUSH
12265: PPUSH
12266: PPUSH
12267: PPUSH
12268: PPUSH
12269: PPUSH
12270: PPUSH
12271: PPUSH
12272: PPUSH
12273: PPUSH
12274: PPUSH
12275: PPUSH
// for for_unit in for_units do
12276: LD_ADDR_VAR 0 22
12280: PUSH
12281: LD_VAR 0 5
12285: PUSH
12286: FOR_IN
12287: IFFALSE 12794
// begin x := px ;
12289: LD_ADDR_VAR 0 9
12293: PUSH
12294: LD_VAR 0 1
12298: ST_TO_ADDR
// y := py ;
12299: LD_ADDR_VAR 0 10
12303: PUSH
12304: LD_VAR 0 2
12308: ST_TO_ADDR
// lx := px ;
12309: LD_ADDR_VAR 0 13
12313: PUSH
12314: LD_VAR 0 1
12318: ST_TO_ADDR
// ly := py ;
12319: LD_ADDR_VAR 0 14
12323: PUSH
12324: LD_VAR 0 2
12328: ST_TO_ADDR
// for j2 := 1 to hloubka do
12329: LD_ADDR_VAR 0 18
12333: PUSH
12334: DOUBLE
12335: LD_INT 1
12337: DEC
12338: ST_TO_ADDR
12339: LD_VAR 0 3
12343: PUSH
12344: FOR_TO
12345: IFFALSE 12677
// begin howgood := 50000 ;
12347: LD_ADDR_VAR 0 15
12351: PUSH
12352: LD_INT 50000
12354: ST_TO_ADDR
// smer := 0 ;
12355: LD_ADDR_VAR 0 16
12359: PUSH
12360: LD_INT 0
12362: ST_TO_ADDR
// kolem := 0 ;
12363: LD_ADDR_VAR 0 21
12367: PUSH
12368: LD_INT 0
12370: ST_TO_ADDR
// for i2 := 0 to 4 do
12371: LD_ADDR_VAR 0 17
12375: PUSH
12376: DOUBLE
12377: LD_INT 0
12379: DEC
12380: ST_TO_ADDR
12381: LD_INT 4
12383: PUSH
12384: FOR_TO
12385: IFFALSE 12579
// begin x2 := ShiftX ( x , i2 , krok ) ;
12387: LD_ADDR_VAR 0 11
12391: PUSH
12392: LD_VAR 0 9
12396: PPUSH
12397: LD_VAR 0 17
12401: PPUSH
12402: LD_VAR 0 4
12406: PPUSH
12407: CALL_OW 272
12411: ST_TO_ADDR
// y2 := ShiftY ( y , i2 , krok ) ;
12412: LD_ADDR_VAR 0 12
12416: PUSH
12417: LD_VAR 0 10
12421: PPUSH
12422: LD_VAR 0 17
12426: PPUSH
12427: LD_VAR 0 4
12431: PPUSH
12432: CALL_OW 273
12436: ST_TO_ADDR
// hsee := SeeXY ( host_side , x2 , y2 ) ;
12437: LD_ADDR_VAR 0 20
12441: PUSH
12442: LD_VAR 0 6
12446: PPUSH
12447: LD_VAR 0 11
12451: PPUSH
12452: LD_VAR 0 12
12456: PPUSH
12457: CALL_OW 293
12461: ST_TO_ADDR
// if hsee < howgood and GetDistXY ( px , py , x , y ) < GetDistXY ( px , py , x2 , y2 ) then
12462: LD_VAR 0 20
12466: PUSH
12467: LD_VAR 0 15
12471: LESS
12472: PUSH
12473: LD_VAR 0 1
12477: PPUSH
12478: LD_VAR 0 2
12482: PPUSH
12483: LD_VAR 0 9
12487: PPUSH
12488: LD_VAR 0 10
12492: PPUSH
12493: CALL_OW 298
12497: PUSH
12498: LD_VAR 0 1
12502: PPUSH
12503: LD_VAR 0 2
12507: PPUSH
12508: LD_VAR 0 11
12512: PPUSH
12513: LD_VAR 0 12
12517: PPUSH
12518: CALL_OW 298
12522: LESS
12523: AND
12524: IFFALSE 12561
// begin howgood := SeeXY ( host_side , x2 , y2 ) ;
12526: LD_ADDR_VAR 0 15
12530: PUSH
12531: LD_VAR 0 6
12535: PPUSH
12536: LD_VAR 0 11
12540: PPUSH
12541: LD_VAR 0 12
12545: PPUSH
12546: CALL_OW 293
12550: ST_TO_ADDR
// smer := i2 ;
12551: LD_ADDR_VAR 0 16
12555: PUSH
12556: LD_VAR 0 17
12560: ST_TO_ADDR
// end ; kolem := kolem + hsee ;
12561: LD_ADDR_VAR 0 21
12565: PUSH
12566: LD_VAR 0 21
12570: PUSH
12571: LD_VAR 0 20
12575: PLUS
12576: ST_TO_ADDR
// end ;
12577: GO 12384
12579: POP
12580: POP
// x := ShiftX ( x , smer , krok ) ;
12581: LD_ADDR_VAR 0 9
12585: PUSH
12586: LD_VAR 0 9
12590: PPUSH
12591: LD_VAR 0 16
12595: PPUSH
12596: LD_VAR 0 4
12600: PPUSH
12601: CALL_OW 272
12605: ST_TO_ADDR
// y := ShiftY ( y , smer , krok ) ;
12606: LD_ADDR_VAR 0 10
12610: PUSH
12611: LD_VAR 0 10
12615: PPUSH
12616: LD_VAR 0 16
12620: PPUSH
12621: LD_VAR 0 4
12625: PPUSH
12626: CALL_OW 273
12630: ST_TO_ADDR
// lx := lx ^ x ;
12631: LD_ADDR_VAR 0 13
12635: PUSH
12636: LD_VAR 0 13
12640: PUSH
12641: LD_VAR 0 9
12645: ADD
12646: ST_TO_ADDR
// ly := ly ^ y ;
12647: LD_ADDR_VAR 0 14
12651: PUSH
12652: LD_VAR 0 14
12656: PUSH
12657: LD_VAR 0 10
12661: ADD
12662: ST_TO_ADDR
// if kolem = 0 then
12663: LD_VAR 0 21
12667: PUSH
12668: LD_INT 0
12670: EQUAL
12671: IFFALSE 12675
// break ;
12673: GO 12677
// end ;
12675: GO 12344
12677: POP
12678: POP
// for j2 := ( lx + 0 ) downto 1 do
12679: LD_ADDR_VAR 0 18
12683: PUSH
12684: DOUBLE
12685: LD_VAR 0 13
12689: PUSH
12690: LD_INT 0
12692: PLUS
12693: INC
12694: ST_TO_ADDR
12695: LD_INT 1
12697: PUSH
12698: FOR_DOWNTO
12699: IFFALSE 12790
// begin if not queue and j2 = ( lx + 0 ) then
12701: LD_VAR 0 7
12705: NOT
12706: PUSH
12707: LD_VAR 0 18
12711: PUSH
12712: LD_VAR 0 13
12716: PUSH
12717: LD_INT 0
12719: PLUS
12720: EQUAL
12721: AND
12722: IFFALSE 12757
// ComMoveXY ( for_unit , lx [ j2 ] , ly [ j2 ] ) else
12724: LD_VAR 0 22
12728: PPUSH
12729: LD_VAR 0 13
12733: PUSH
12734: LD_VAR 0 18
12738: ARRAY
12739: PPUSH
12740: LD_VAR 0 14
12744: PUSH
12745: LD_VAR 0 18
12749: ARRAY
12750: PPUSH
12751: CALL_OW 111
12755: GO 12788
// begin AddComMoveXY ( for_unit , lx [ j2 ] , ly [ j2 ] ) ;
12757: LD_VAR 0 22
12761: PPUSH
12762: LD_VAR 0 13
12766: PUSH
12767: LD_VAR 0 18
12771: ARRAY
12772: PPUSH
12773: LD_VAR 0 14
12777: PUSH
12778: LD_VAR 0 18
12782: ARRAY
12783: PPUSH
12784: CALL_OW 171
// end ; end ;
12788: GO 12698
12790: POP
12791: POP
// end ;
12792: GO 12286
12794: POP
12795: POP
// end ;
12796: LD_VAR 0 8
12800: RET
// export function evade_shortest_way ( for_units , queue , agressive ) ; var for_unit ; var unx , uny ; begin
12801: LD_INT 0
12803: PPUSH
12804: PPUSH
12805: PPUSH
12806: PPUSH
// for for_unit in for_units do
12807: LD_ADDR_VAR 0 5
12811: PUSH
12812: LD_VAR 0 1
12816: PUSH
12817: FOR_IN
12818: IFFALSE 12881
// begin unx := GetX ( for_unit ) ;
12820: LD_ADDR_VAR 0 6
12824: PUSH
12825: LD_VAR 0 5
12829: PPUSH
12830: CALL_OW 250
12834: ST_TO_ADDR
// uny := GetY ( for_unit ) ;
12835: LD_ADDR_VAR 0 7
12839: PUSH
12840: LD_VAR 0 5
12844: PPUSH
12845: CALL_OW 251
12849: ST_TO_ADDR
// evade_shortest_way_from_xy ( unx , uny , for_unit , queue , agressive ) ;
12850: LD_VAR 0 6
12854: PPUSH
12855: LD_VAR 0 7
12859: PPUSH
12860: LD_VAR 0 5
12864: PPUSH
12865: LD_VAR 0 2
12869: PPUSH
12870: LD_VAR 0 3
12874: PPUSH
12875: CALL 12888 0 5
// end ;
12879: GO 12817
12881: POP
12882: POP
// end ;
12883: LD_VAR 0 4
12887: RET
// export function evade_shortest_way_from_xy ( unx , uny , for_units , queue , agressive ) ; var foundswX , foundswY , foundswD ; var eswTX , eswTY ; var for_unit ; begin
12888: LD_INT 0
12890: PPUSH
12891: PPUSH
12892: PPUSH
12893: PPUSH
12894: PPUSH
12895: PPUSH
12896: PPUSH
// for for_unit in for_units do
12897: LD_ADDR_VAR 0 12
12901: PUSH
12902: LD_VAR 0 3
12906: PUSH
12907: FOR_IN
12908: IFFALSE 13624
// begin foundswD := 50000 ;
12910: LD_ADDR_VAR 0 9
12914: PUSH
12915: LD_INT 50000
12917: ST_TO_ADDR
// eswTX := 0 ;
12918: LD_ADDR_VAR 0 10
12922: PUSH
12923: LD_INT 0
12925: ST_TO_ADDR
// eswTY := 0 ;
12926: LD_ADDR_VAR 0 11
12930: PUSH
12931: LD_INT 0
12933: ST_TO_ADDR
// while eswTX < map_size_x do
12934: LD_VAR 0 10
12938: PUSH
12939: LD_EXP 28
12943: LESS
12944: IFFALSE 13044
// begin if GetDistXY ( unx , uny , eswTX , eswTY ) < foundswD then
12946: LD_VAR 0 1
12950: PPUSH
12951: LD_VAR 0 2
12955: PPUSH
12956: LD_VAR 0 10
12960: PPUSH
12961: LD_VAR 0 11
12965: PPUSH
12966: CALL_OW 298
12970: PUSH
12971: LD_VAR 0 9
12975: LESS
12976: IFFALSE 13028
// begin foundswX := eswTX ;
12978: LD_ADDR_VAR 0 7
12982: PUSH
12983: LD_VAR 0 10
12987: ST_TO_ADDR
// foundswY := eswTY ;
12988: LD_ADDR_VAR 0 8
12992: PUSH
12993: LD_VAR 0 11
12997: ST_TO_ADDR
// foundswD := GetDistXY ( unx , uny , eswTX , eswTY ) ;
12998: LD_ADDR_VAR 0 9
13002: PUSH
13003: LD_VAR 0 1
13007: PPUSH
13008: LD_VAR 0 2
13012: PPUSH
13013: LD_VAR 0 10
13017: PPUSH
13018: LD_VAR 0 11
13022: PPUSH
13023: CALL_OW 298
13027: ST_TO_ADDR
// end ; eswTX := eswTX + 10 ;
13028: LD_ADDR_VAR 0 10
13032: PUSH
13033: LD_VAR 0 10
13037: PUSH
13038: LD_INT 10
13040: PLUS
13041: ST_TO_ADDR
// end ;
13042: GO 12934
// eswTX := map_size_x div 2 ;
13044: LD_ADDR_VAR 0 10
13048: PUSH
13049: LD_EXP 28
13053: PUSH
13054: LD_INT 2
13056: DIV
13057: ST_TO_ADDR
// eswTY := map_size_y - 1 ;
13058: LD_ADDR_VAR 0 11
13062: PUSH
13063: LD_EXP 29
13067: PUSH
13068: LD_INT 1
13070: MINUS
13071: ST_TO_ADDR
// while eswTX < ( map_size_x + map_size_x div 2 ) do
13072: LD_VAR 0 10
13076: PUSH
13077: LD_EXP 28
13081: PUSH
13082: LD_EXP 28
13086: PUSH
13087: LD_INT 2
13089: DIV
13090: PLUS
13091: LESS
13092: IFFALSE 13192
// begin if GetDistXY ( unx , uny , eswTX , eswTY ) < foundswD then
13094: LD_VAR 0 1
13098: PPUSH
13099: LD_VAR 0 2
13103: PPUSH
13104: LD_VAR 0 10
13108: PPUSH
13109: LD_VAR 0 11
13113: PPUSH
13114: CALL_OW 298
13118: PUSH
13119: LD_VAR 0 9
13123: LESS
13124: IFFALSE 13176
// begin foundswX := eswTX ;
13126: LD_ADDR_VAR 0 7
13130: PUSH
13131: LD_VAR 0 10
13135: ST_TO_ADDR
// foundswY := eswTY ;
13136: LD_ADDR_VAR 0 8
13140: PUSH
13141: LD_VAR 0 11
13145: ST_TO_ADDR
// foundswD := GetDistXY ( unx , uny , eswTX , eswTY ) ;
13146: LD_ADDR_VAR 0 9
13150: PUSH
13151: LD_VAR 0 1
13155: PPUSH
13156: LD_VAR 0 2
13160: PPUSH
13161: LD_VAR 0 10
13165: PPUSH
13166: LD_VAR 0 11
13170: PPUSH
13171: CALL_OW 298
13175: ST_TO_ADDR
// end ; eswTX := eswTX + 10 ;
13176: LD_ADDR_VAR 0 10
13180: PUSH
13181: LD_VAR 0 10
13185: PUSH
13186: LD_INT 10
13188: PLUS
13189: ST_TO_ADDR
// end ;
13190: GO 13072
// eswTX := 0 ;
13192: LD_ADDR_VAR 0 10
13196: PUSH
13197: LD_INT 0
13199: ST_TO_ADDR
// eswTY := 0 ;
13200: LD_ADDR_VAR 0 11
13204: PUSH
13205: LD_INT 0
13207: ST_TO_ADDR
// while eswTY < ( map_size_y ) do
13208: LD_VAR 0 11
13212: PUSH
13213: LD_EXP 29
13217: LESS
13218: IFFALSE 13332
// begin if GetDistXY ( unx , uny , eswTX , eswTY ) < foundswD then
13220: LD_VAR 0 1
13224: PPUSH
13225: LD_VAR 0 2
13229: PPUSH
13230: LD_VAR 0 10
13234: PPUSH
13235: LD_VAR 0 11
13239: PPUSH
13240: CALL_OW 298
13244: PUSH
13245: LD_VAR 0 9
13249: LESS
13250: IFFALSE 13302
// begin foundswX := eswTX ;
13252: LD_ADDR_VAR 0 7
13256: PUSH
13257: LD_VAR 0 10
13261: ST_TO_ADDR
// foundswY := eswTY ;
13262: LD_ADDR_VAR 0 8
13266: PUSH
13267: LD_VAR 0 11
13271: ST_TO_ADDR
// foundswD := GetDistXY ( unx , uny , eswTX , eswTY ) ;
13272: LD_ADDR_VAR 0 9
13276: PUSH
13277: LD_VAR 0 1
13281: PPUSH
13282: LD_VAR 0 2
13286: PPUSH
13287: LD_VAR 0 10
13291: PPUSH
13292: LD_VAR 0 11
13296: PPUSH
13297: CALL_OW 298
13301: ST_TO_ADDR
// end ; eswTY := eswTY + 10 ;
13302: LD_ADDR_VAR 0 11
13306: PUSH
13307: LD_VAR 0 11
13311: PUSH
13312: LD_INT 10
13314: PLUS
13315: ST_TO_ADDR
// eswTX := eswTX + 5 ;
13316: LD_ADDR_VAR 0 10
13320: PUSH
13321: LD_VAR 0 10
13325: PUSH
13326: LD_INT 5
13328: PLUS
13329: ST_TO_ADDR
// end ;
13330: GO 13208
// eswTX := map_size_x ;
13332: LD_ADDR_VAR 0 10
13336: PUSH
13337: LD_EXP 28
13341: ST_TO_ADDR
// eswTY := 1 ;
13342: LD_ADDR_VAR 0 11
13346: PUSH
13347: LD_INT 1
13349: ST_TO_ADDR
// while eswTY < ( map_size_y ) do
13350: LD_VAR 0 11
13354: PUSH
13355: LD_EXP 29
13359: LESS
13360: IFFALSE 13474
// begin if GetDistXY ( unx , uny , eswTX , eswTY ) < foundswD then
13362: LD_VAR 0 1
13366: PPUSH
13367: LD_VAR 0 2
13371: PPUSH
13372: LD_VAR 0 10
13376: PPUSH
13377: LD_VAR 0 11
13381: PPUSH
13382: CALL_OW 298
13386: PUSH
13387: LD_VAR 0 9
13391: LESS
13392: IFFALSE 13444
// begin foundswX := eswTX ;
13394: LD_ADDR_VAR 0 7
13398: PUSH
13399: LD_VAR 0 10
13403: ST_TO_ADDR
// foundswY := eswTY ;
13404: LD_ADDR_VAR 0 8
13408: PUSH
13409: LD_VAR 0 11
13413: ST_TO_ADDR
// foundswD := GetDistXY ( unx , uny , eswTX , eswTY ) ;
13414: LD_ADDR_VAR 0 9
13418: PUSH
13419: LD_VAR 0 1
13423: PPUSH
13424: LD_VAR 0 2
13428: PPUSH
13429: LD_VAR 0 10
13433: PPUSH
13434: LD_VAR 0 11
13438: PPUSH
13439: CALL_OW 298
13443: ST_TO_ADDR
// end ; eswTY := eswTY + 10 ;
13444: LD_ADDR_VAR 0 11
13448: PUSH
13449: LD_VAR 0 11
13453: PUSH
13454: LD_INT 10
13456: PLUS
13457: ST_TO_ADDR
// eswTX := eswTX + 5 ;
13458: LD_ADDR_VAR 0 10
13462: PUSH
13463: LD_VAR 0 10
13467: PUSH
13468: LD_INT 5
13470: PLUS
13471: ST_TO_ADDR
// end ;
13472: GO 13350
// if queue then
13474: LD_VAR 0 4
13478: IFFALSE 13552
// begin if agressive then
13480: LD_VAR 0 5
13484: IFFALSE 13519
// begin AddComAgressiveMove ( for_unit , foundswX , foundswY ) ;
13486: LD_VAR 0 12
13490: PPUSH
13491: LD_VAR 0 7
13495: PPUSH
13496: LD_VAR 0 8
13500: PPUSH
13501: CALL_OW 174
// AddComMoveToArea ( for_unit , border ) ;
13505: LD_VAR 0 12
13509: PPUSH
13510: LD_INT 7
13512: PPUSH
13513: CALL_OW 173
// end else
13517: GO 13550
// begin AddComMoveXY ( for_unit , foundswX , foundswY ) ;
13519: LD_VAR 0 12
13523: PPUSH
13524: LD_VAR 0 7
13528: PPUSH
13529: LD_VAR 0 8
13533: PPUSH
13534: CALL_OW 171
// AddComMoveToArea ( for_unit , border ) ;
13538: LD_VAR 0 12
13542: PPUSH
13543: LD_INT 7
13545: PPUSH
13546: CALL_OW 173
// end ; end else
13550: GO 13622
// begin if agressive then
13552: LD_VAR 0 5
13556: IFFALSE 13591
// begin ComAgressiveMove ( for_unit , foundswX , foundswY ) ;
13558: LD_VAR 0 12
13562: PPUSH
13563: LD_VAR 0 7
13567: PPUSH
13568: LD_VAR 0 8
13572: PPUSH
13573: CALL_OW 114
// AddComMoveToArea ( for_unit , border ) ;
13577: LD_VAR 0 12
13581: PPUSH
13582: LD_INT 7
13584: PPUSH
13585: CALL_OW 173
// end else
13589: GO 13622
// begin ComMoveXY ( for_unit , foundswX , foundswY ) ;
13591: LD_VAR 0 12
13595: PPUSH
13596: LD_VAR 0 7
13600: PPUSH
13601: LD_VAR 0 8
13605: PPUSH
13606: CALL_OW 111
// AddComMoveToArea ( for_unit , border ) ;
13610: LD_VAR 0 12
13614: PPUSH
13615: LD_INT 7
13617: PPUSH
13618: CALL_OW 173
// end ; end ; end ;
13622: GO 12907
13624: POP
13625: POP
// end ;
13626: LD_VAR 0 6
13630: RET
// export function get_live_from_list ( sez1 , skip , pocet ) ; var un1 , count , max , skiped ; var list ; begin
13631: LD_INT 0
13633: PPUSH
13634: PPUSH
13635: PPUSH
13636: PPUSH
13637: PPUSH
13638: PPUSH
// un1 := 1 ;
13639: LD_ADDR_VAR 0 5
13643: PUSH
13644: LD_INT 1
13646: ST_TO_ADDR
// count := 0 ;
13647: LD_ADDR_VAR 0 6
13651: PUSH
13652: LD_INT 0
13654: ST_TO_ADDR
// skiped := 0 ;
13655: LD_ADDR_VAR 0 8
13659: PUSH
13660: LD_INT 0
13662: ST_TO_ADDR
// max := ( sez1 + 0 ) ;
13663: LD_ADDR_VAR 0 7
13667: PUSH
13668: LD_VAR 0 1
13672: PUSH
13673: LD_INT 0
13675: PLUS
13676: ST_TO_ADDR
// while un1 <= max and count < pocet do
13677: LD_VAR 0 5
13681: PUSH
13682: LD_VAR 0 7
13686: LESSEQUAL
13687: PUSH
13688: LD_VAR 0 6
13692: PUSH
13693: LD_VAR 0 3
13697: LESS
13698: AND
13699: IFFALSE 13822
// begin if IsLive ( sez1 [ un1 ] ) then
13701: LD_VAR 0 1
13705: PUSH
13706: LD_VAR 0 5
13710: ARRAY
13711: PPUSH
13712: CALL_OW 300
13716: IFFALSE 13806
// begin if skiped >= skip then
13718: LD_VAR 0 8
13722: PUSH
13723: LD_VAR 0 2
13727: GREATEREQUAL
13728: IFFALSE 13792
// begin if list then
13730: LD_VAR 0 9
13734: IFFALSE 13760
// list := list ^ sez1 [ un1 ] else
13736: LD_ADDR_VAR 0 9
13740: PUSH
13741: LD_VAR 0 9
13745: PUSH
13746: LD_VAR 0 1
13750: PUSH
13751: LD_VAR 0 5
13755: ARRAY
13756: ADD
13757: ST_TO_ADDR
13758: GO 13776
// list := sez1 [ un1 ] ;
13760: LD_ADDR_VAR 0 9
13764: PUSH
13765: LD_VAR 0 1
13769: PUSH
13770: LD_VAR 0 5
13774: ARRAY
13775: ST_TO_ADDR
// count := count + 1 ;
13776: LD_ADDR_VAR 0 6
13780: PUSH
13781: LD_VAR 0 6
13785: PUSH
13786: LD_INT 1
13788: PLUS
13789: ST_TO_ADDR
// end else
13790: GO 13806
// begin skiped := skiped + 1 ;
13792: LD_ADDR_VAR 0 8
13796: PUSH
13797: LD_VAR 0 8
13801: PUSH
13802: LD_INT 1
13804: PLUS
13805: ST_TO_ADDR
// end ; end ; un1 := un1 + 1 ;
13806: LD_ADDR_VAR 0 5
13810: PUSH
13811: LD_VAR 0 5
13815: PUSH
13816: LD_INT 1
13818: PLUS
13819: ST_TO_ADDR
// end ;
13820: GO 13677
// result := list ;
13822: LD_ADDR_VAR 0 4
13826: PUSH
13827: LD_VAR 0 9
13831: ST_TO_ADDR
// end ;
13832: LD_VAR 0 4
13836: RET
// export function see_any ( strana , sez2 ) ; var sai , see_any_r ; begin
13837: LD_INT 0
13839: PPUSH
13840: PPUSH
13841: PPUSH
// see_any_r := false ;
13842: LD_ADDR_VAR 0 5
13846: PUSH
13847: LD_INT 0
13849: ST_TO_ADDR
// for sai in sez2 do
13850: LD_ADDR_VAR 0 4
13854: PUSH
13855: LD_VAR 0 2
13859: PUSH
13860: FOR_IN
13861: IFFALSE 13891
// if See ( strana , sai ) then
13863: LD_VAR 0 1
13867: PPUSH
13868: LD_VAR 0 4
13872: PPUSH
13873: CALL_OW 292
13877: IFFALSE 13889
// begin see_any_r := true ;
13879: LD_ADDR_VAR 0 5
13883: PUSH
13884: LD_INT 1
13886: ST_TO_ADDR
// break ;
13887: GO 13891
// end ;
13889: GO 13860
13891: POP
13892: POP
// ; result := see_any_r ;
13893: LD_ADDR_VAR 0 3
13897: PUSH
13898: LD_VAR 0 5
13902: ST_TO_ADDR
// end ;
13903: LD_VAR 0 3
13907: RET
// export function enter_near_vehicle ( who , dist , what ) ; var add , i , j ; begin
13908: LD_INT 0
13910: PPUSH
13911: PPUSH
13912: PPUSH
13913: PPUSH
// for i in who do
13914: LD_ADDR_VAR 0 6
13918: PUSH
13919: LD_VAR 0 1
13923: PUSH
13924: FOR_IN
13925: IFFALSE 13996
// begin for j in what do
13927: LD_ADDR_VAR 0 7
13931: PUSH
13932: LD_VAR 0 3
13936: PUSH
13937: FOR_IN
13938: IFFALSE 13992
// begin if not IsDrivenBy ( j ) and GetDistUnits ( i , j ) <= dist then
13940: LD_VAR 0 7
13944: PPUSH
13945: CALL_OW 311
13949: NOT
13950: PUSH
13951: LD_VAR 0 6
13955: PPUSH
13956: LD_VAR 0 7
13960: PPUSH
13961: CALL_OW 296
13965: PUSH
13966: LD_VAR 0 2
13970: LESSEQUAL
13971: AND
13972: IFFALSE 13990
// begin ComEnterUnit ( i , j ) ;
13974: LD_VAR 0 6
13978: PPUSH
13979: LD_VAR 0 7
13983: PPUSH
13984: CALL_OW 120
// break ;
13988: GO 13992
// end ; end ;
13990: GO 13937
13992: POP
13993: POP
// end ;
13994: GO 13924
13996: POP
13997: POP
// end ;
13998: LD_VAR 0 4
14002: RET
// export function any_near ( who , dist , what ) ; var add , i , j ; begin
14003: LD_INT 0
14005: PPUSH
14006: PPUSH
14007: PPUSH
14008: PPUSH
// for i in who do
14009: LD_ADDR_VAR 0 6
14013: PUSH
14014: LD_VAR 0 1
14018: PUSH
14019: FOR_IN
14020: IFFALSE 14119
// begin add := false ;
14022: LD_ADDR_VAR 0 5
14026: PUSH
14027: LD_INT 0
14029: ST_TO_ADDR
// for j in what do
14030: LD_ADDR_VAR 0 7
14034: PUSH
14035: LD_VAR 0 3
14039: PUSH
14040: FOR_IN
14041: IFFALSE 14075
// begin if GetDistUnits ( i , j ) <= dist then
14043: LD_VAR 0 6
14047: PPUSH
14048: LD_VAR 0 7
14052: PPUSH
14053: CALL_OW 296
14057: PUSH
14058: LD_VAR 0 2
14062: LESSEQUAL
14063: IFFALSE 14073
// begin add := true ;
14065: LD_ADDR_VAR 0 5
14069: PUSH
14070: LD_INT 1
14072: ST_TO_ADDR
// end ; end ;
14073: GO 14040
14075: POP
14076: POP
// if add then
14077: LD_VAR 0 5
14081: IFFALSE 14117
// begin if result then
14083: LD_VAR 0 4
14087: IFFALSE 14107
// result := result ^ i else
14089: LD_ADDR_VAR 0 4
14093: PUSH
14094: LD_VAR 0 4
14098: PUSH
14099: LD_VAR 0 6
14103: ADD
14104: ST_TO_ADDR
14105: GO 14117
// result := i ;
14107: LD_ADDR_VAR 0 4
14111: PUSH
14112: LD_VAR 0 6
14116: ST_TO_ADDR
// end ; end ;
14117: GO 14019
14119: POP
14120: POP
// end ;
14121: LD_VAR 0 4
14125: RET
// export function comqb ; begin
14126: LD_INT 0
14128: PPUSH
// com_queue := true ;
14129: LD_ADDR_OWVAR 49
14133: PUSH
14134: LD_INT 1
14136: ST_TO_ADDR
// end ;
14137: LD_VAR 0 1
14141: RET
// export function comqe ; begin
14142: LD_INT 0
14144: PPUSH
// com_queue := false ;
14145: LD_ADDR_OWVAR 49
14149: PUSH
14150: LD_INT 0
14152: ST_TO_ADDR
// end ;
14153: LD_VAR 0 1
14157: RET
// export function take_path ( for_units , path , agressive ) ; var i1 ; var a ; begin
14158: LD_INT 0
14160: PPUSH
14161: PPUSH
14162: PPUSH
// i1 := 1 ;
14163: LD_ADDR_VAR 0 5
14167: PUSH
14168: LD_INT 1
14170: ST_TO_ADDR
// while i1 <= path do
14171: LD_VAR 0 5
14175: PUSH
14176: LD_VAR 0 2
14180: LESSEQUAL
14181: IFFALSE 14428
// begin a := path [ i1 ] ;
14183: LD_ADDR_VAR 0 6
14187: PUSH
14188: LD_VAR 0 2
14192: PUSH
14193: LD_VAR 0 5
14197: ARRAY
14198: ST_TO_ADDR
// if a < 0 then
14199: LD_VAR 0 6
14203: PUSH
14204: LD_INT 0
14206: LESS
14207: IFFALSE 14264
// begin while a <= - 1 do
14209: LD_VAR 0 6
14213: PUSH
14214: LD_INT 1
14216: NEG
14217: LESSEQUAL
14218: IFFALSE 14248
// begin a := a + 1 ;
14220: LD_ADDR_VAR 0 6
14224: PUSH
14225: LD_VAR 0 6
14229: PUSH
14230: LD_INT 1
14232: PLUS
14233: ST_TO_ADDR
// AddComWait ( for_units , 0 0$1 ) ;
14234: LD_VAR 0 1
14238: PPUSH
14239: LD_INT 35
14241: PPUSH
14242: CALL_OW 202
// end ;
14246: GO 14209
// i1 := i1 + 1 ;
14248: LD_ADDR_VAR 0 5
14252: PUSH
14253: LD_VAR 0 5
14257: PUSH
14258: LD_INT 1
14260: PLUS
14261: ST_TO_ADDR
// end else
14262: GO 14426
// begin if a = 0 then
14264: LD_VAR 0 6
14268: PUSH
14269: LD_INT 0
14271: EQUAL
14272: IFFALSE 14334
// begin a := path [ i1 + 1 ] ;
14274: LD_ADDR_VAR 0 6
14278: PUSH
14279: LD_VAR 0 2
14283: PUSH
14284: LD_VAR 0 5
14288: PUSH
14289: LD_INT 1
14291: PLUS
14292: ARRAY
14293: ST_TO_ADDR
// if a = 0 then
14294: LD_VAR 0 6
14298: PUSH
14299: LD_INT 0
14301: EQUAL
14302: IFFALSE 14313
// AddComReturn ( for_units ) ;
14304: LD_VAR 0 1
14308: PPUSH
14309: CALL_OW 204
// if a = 1 then
14313: LD_VAR 0 6
14317: PUSH
14318: LD_INT 1
14320: EQUAL
14321: IFFALSE 14332
// AddComRemember ( for_units ) ;
14323: LD_VAR 0 1
14327: PPUSH
14328: CALL_OW 203
// end else
14332: GO 14412
// begin if agressive then
14334: LD_VAR 0 3
14338: IFFALSE 14377
// AddComAgressiveMove ( for_units , path [ i1 ] , path [ i1 + 1 ] ) else
14340: LD_VAR 0 1
14344: PPUSH
14345: LD_VAR 0 2
14349: PUSH
14350: LD_VAR 0 5
14354: ARRAY
14355: PPUSH
14356: LD_VAR 0 2
14360: PUSH
14361: LD_VAR 0 5
14365: PUSH
14366: LD_INT 1
14368: PLUS
14369: ARRAY
14370: PPUSH
14371: CALL_OW 174
14375: GO 14412
// AddComMoveXY ( for_units , path [ i1 ] , path [ i1 + 1 ] ) ;
14377: LD_VAR 0 1
14381: PPUSH
14382: LD_VAR 0 2
14386: PUSH
14387: LD_VAR 0 5
14391: ARRAY
14392: PPUSH
14393: LD_VAR 0 2
14397: PUSH
14398: LD_VAR 0 5
14402: PUSH
14403: LD_INT 1
14405: PLUS
14406: ARRAY
14407: PPUSH
14408: CALL_OW 171
// end ; i1 := i1 + 2 ;
14412: LD_ADDR_VAR 0 5
14416: PUSH
14417: LD_VAR 0 5
14421: PUSH
14422: LD_INT 2
14424: PLUS
14425: ST_TO_ADDR
// end ; end ;
14426: GO 14171
// end ;
14428: LD_VAR 0 4
14432: RET
// export function find_drivers ( cars , drivers ) ; var empty , free , i , konec ; begin
14433: LD_INT 0
14435: PPUSH
14436: PPUSH
14437: PPUSH
14438: PPUSH
14439: PPUSH
// cars := cars union [ ] ;
14440: LD_ADDR_VAR 0 1
14444: PUSH
14445: LD_VAR 0 1
14449: PUSH
14450: EMPTY
14451: UNION
14452: ST_TO_ADDR
// drivers := drivers union [ ] ;
14453: LD_ADDR_VAR 0 2
14457: PUSH
14458: LD_VAR 0 2
14462: PUSH
14463: EMPTY
14464: UNION
14465: ST_TO_ADDR
// for i in cars do
14466: LD_ADDR_VAR 0 6
14470: PUSH
14471: LD_VAR 0 1
14475: PUSH
14476: FOR_IN
14477: IFFALSE 14513
// if not IsDrivenBy ( i ) then
14479: LD_VAR 0 6
14483: PPUSH
14484: CALL_OW 311
14488: NOT
14489: IFFALSE 14511
// empty := add ( empty , i ) ;
14491: LD_ADDR_VAR 0 4
14495: PUSH
14496: LD_VAR 0 4
14500: PPUSH
14501: LD_VAR 0 6
14505: PPUSH
14506: CALL 14802 0 2
14510: ST_TO_ADDR
14511: GO 14476
14513: POP
14514: POP
// for i in drivers do
14515: LD_ADDR_VAR 0 6
14519: PUSH
14520: LD_VAR 0 2
14524: PUSH
14525: FOR_IN
14526: IFFALSE 14562
// if not IsInUnit ( i ) then
14528: LD_VAR 0 6
14532: PPUSH
14533: CALL_OW 310
14537: NOT
14538: IFFALSE 14560
// free := add ( free , i ) ;
14540: LD_ADDR_VAR 0 5
14544: PUSH
14545: LD_VAR 0 5
14549: PPUSH
14550: LD_VAR 0 6
14554: PPUSH
14555: CALL 14802 0 2
14559: ST_TO_ADDR
14560: GO 14525
14562: POP
14563: POP
// result := cars diff empty ;
14564: LD_ADDR_VAR 0 3
14568: PUSH
14569: LD_VAR 0 1
14573: PUSH
14574: LD_VAR 0 4
14578: DIFF
14579: ST_TO_ADDR
// if empty <= free then
14580: LD_VAR 0 4
14584: PUSH
14585: LD_VAR 0 5
14589: LESSEQUAL
14590: IFFALSE 14604
// konec := empty else
14592: LD_ADDR_VAR 0 7
14596: PUSH
14597: LD_VAR 0 4
14601: ST_TO_ADDR
14602: GO 14614
// konec := free ;
14604: LD_ADDR_VAR 0 7
14608: PUSH
14609: LD_VAR 0 5
14613: ST_TO_ADDR
// for i := 1 to konec do
14614: LD_ADDR_VAR 0 6
14618: PUSH
14619: DOUBLE
14620: LD_INT 1
14622: DEC
14623: ST_TO_ADDR
14624: LD_VAR 0 7
14628: PUSH
14629: FOR_TO
14630: IFFALSE 14686
// begin ComEnterUnit ( free [ i ] , empty [ i ] ) ;
14632: LD_VAR 0 5
14636: PUSH
14637: LD_VAR 0 6
14641: ARRAY
14642: PPUSH
14643: LD_VAR 0 4
14647: PUSH
14648: LD_VAR 0 6
14652: ARRAY
14653: PPUSH
14654: CALL_OW 120
// result := add ( result , empty [ i ] ) ;
14658: LD_ADDR_VAR 0 3
14662: PUSH
14663: LD_VAR 0 3
14667: PPUSH
14668: LD_VAR 0 4
14672: PUSH
14673: LD_VAR 0 6
14677: ARRAY
14678: PPUSH
14679: CALL 14802 0 2
14683: ST_TO_ADDR
// end ;
14684: GO 14629
14686: POP
14687: POP
// end ;
14688: LD_VAR 0 3
14692: RET
// export function rand_xy_in_map ; var x , y ; begin
14693: LD_INT 0
14695: PPUSH
14696: PPUSH
14697: PPUSH
// y := Rand ( 2 , map_size_y - 2 ) ;
14698: LD_ADDR_VAR 0 3
14702: PUSH
14703: LD_INT 2
14705: PPUSH
14706: LD_EXP 29
14710: PUSH
14711: LD_INT 2
14713: MINUS
14714: PPUSH
14715: CALL_OW 12
14719: ST_TO_ADDR
// x := Rand ( y div 2 + 2 , map_size_x + y div 2 - 2 ) ;
14720: LD_ADDR_VAR 0 2
14724: PUSH
14725: LD_VAR 0 3
14729: PUSH
14730: LD_INT 2
14732: DIV
14733: PUSH
14734: LD_INT 2
14736: PLUS
14737: PPUSH
14738: LD_EXP 28
14742: PUSH
14743: LD_VAR 0 3
14747: PUSH
14748: LD_INT 2
14750: DIV
14751: PLUS
14752: PUSH
14753: LD_INT 2
14755: MINUS
14756: PPUSH
14757: CALL_OW 12
14761: ST_TO_ADDR
// result := [ x , y ] ;
14762: LD_ADDR_VAR 0 1
14766: PUSH
14767: LD_VAR 0 2
14771: PUSH
14772: LD_VAR 0 3
14776: PUSH
14777: EMPTY
14778: LIST
14779: LIST
14780: ST_TO_ADDR
// end ;
14781: LD_VAR 0 1
14785: RET
// export function TalkOn ; begin
14786: LD_INT 0
14788: PPUSH
// end ;
14789: LD_VAR 0 1
14793: RET
// export function TalkOff ; begin
14794: LD_INT 0
14796: PPUSH
// end ;
14797: LD_VAR 0 1
14801: RET
// export function add ( list , list1 ) ; begin
14802: LD_INT 0
14804: PPUSH
// if list = 0 then
14805: LD_VAR 0 1
14809: PUSH
14810: LD_INT 0
14812: EQUAL
14813: IFFALSE 14822
// list := [ ] ;
14815: LD_ADDR_VAR 0 1
14819: PUSH
14820: EMPTY
14821: ST_TO_ADDR
// if list1 = 0 then
14822: LD_VAR 0 2
14826: PUSH
14827: LD_INT 0
14829: EQUAL
14830: IFFALSE 14839
// list1 := [ ] ;
14832: LD_ADDR_VAR 0 2
14836: PUSH
14837: EMPTY
14838: ST_TO_ADDR
// result := list ^ list1 ;
14839: LD_ADDR_VAR 0 3
14843: PUSH
14844: LD_VAR 0 1
14848: PUSH
14849: LD_VAR 0 2
14853: ADD
14854: ST_TO_ADDR
// end ;
14855: LD_VAR 0 3
14859: RET
// export function SayAny ( lidi , ident , side , sex , Hclass , index ) ; var kdo ; begin
14860: LD_INT 0
14862: PPUSH
14863: PPUSH
// kdo := WhoSayAny ( lidi , side , sex , Hclass , index ) ;
14864: LD_ADDR_VAR 0 8
14868: PUSH
14869: LD_VAR 0 1
14873: PPUSH
14874: LD_VAR 0 3
14878: PPUSH
14879: LD_VAR 0 4
14883: PPUSH
14884: LD_VAR 0 5
14888: PPUSH
14889: LD_VAR 0 6
14893: PPUSH
14894: CALL 14940 0 5
14898: ST_TO_ADDR
// if kdo then
14899: LD_VAR 0 8
14903: IFFALSE 14927
// result := Say ( kdo , ident ) else
14905: LD_ADDR_VAR 0 7
14909: PUSH
14910: LD_VAR 0 8
14914: PPUSH
14915: LD_VAR 0 2
14919: PPUSH
14920: CALL_OW 88
14924: ST_TO_ADDR
14925: GO 14935
// result := false ;
14927: LD_ADDR_VAR 0 7
14931: PUSH
14932: LD_INT 0
14934: ST_TO_ADDR
// end ;
14935: LD_VAR 0 7
14939: RET
// export function WhoSayAny ( lidi , side , sex , Hclass , index ) ; begin
14940: LD_INT 0
14942: PPUSH
// lidi := UnitFilter ( lidi , [ [ f_type , unit_human ] , [ f_side , side ] , f_not , [ f_nation , nation_nature ] ] ) ;
14943: LD_ADDR_VAR 0 1
14947: PUSH
14948: LD_VAR 0 1
14952: PPUSH
14953: LD_INT 21
14955: PUSH
14956: LD_INT 1
14958: PUSH
14959: EMPTY
14960: LIST
14961: LIST
14962: PUSH
14963: LD_INT 22
14965: PUSH
14966: LD_VAR 0 2
14970: PUSH
14971: EMPTY
14972: LIST
14973: LIST
14974: PUSH
14975: LD_INT 3
14977: PUSH
14978: LD_INT 23
14980: PUSH
14981: LD_INT 0
14983: PUSH
14984: EMPTY
14985: LIST
14986: LIST
14987: PUSH
14988: EMPTY
14989: LIST
14990: LIST
14991: LIST
14992: LIST
14993: PPUSH
14994: CALL_OW 72
14998: ST_TO_ADDR
// if sex <> 0 then
14999: LD_VAR 0 3
15003: PUSH
15004: LD_INT 0
15006: NONEQUAL
15007: IFFALSE 15036
// lidi := UnitFilter ( lidi , [ f_sex , sex ] ) ;
15009: LD_ADDR_VAR 0 1
15013: PUSH
15014: LD_VAR 0 1
15018: PPUSH
15019: LD_INT 26
15021: PUSH
15022: LD_VAR 0 3
15026: PUSH
15027: EMPTY
15028: LIST
15029: LIST
15030: PPUSH
15031: CALL_OW 72
15035: ST_TO_ADDR
// if Hclass <> 0 then
15036: LD_VAR 0 4
15040: PUSH
15041: LD_INT 0
15043: NONEQUAL
15044: IFFALSE 15073
// lidi := UnitFilter ( lidi , [ f_class , Hclass ] ) ;
15046: LD_ADDR_VAR 0 1
15050: PUSH
15051: LD_VAR 0 1
15055: PPUSH
15056: LD_INT 25
15058: PUSH
15059: LD_VAR 0 4
15063: PUSH
15064: EMPTY
15065: LIST
15066: LIST
15067: PPUSH
15068: CALL_OW 72
15072: ST_TO_ADDR
// if index <= 0 then
15073: LD_VAR 0 5
15077: PUSH
15078: LD_INT 0
15080: LESSEQUAL
15081: IFFALSE 15091
// index := 1 ;
15083: LD_ADDR_VAR 0 5
15087: PUSH
15088: LD_INT 1
15090: ST_TO_ADDR
// if lidi >= index then
15091: LD_VAR 0 1
15095: PUSH
15096: LD_VAR 0 5
15100: GREATEREQUAL
15101: IFFALSE 15121
// result := lidi [ index ] else
15103: LD_ADDR_VAR 0 6
15107: PUSH
15108: LD_VAR 0 1
15112: PUSH
15113: LD_VAR 0 5
15117: ARRAY
15118: ST_TO_ADDR
15119: GO 15129
// result := 0 ;
15121: LD_ADDR_VAR 0 6
15125: PUSH
15126: LD_INT 0
15128: ST_TO_ADDR
// end ;
15129: LD_VAR 0 6
15133: RET
// export hinty_co_byli ; export function MyHint ( ident ) ; begin
15134: LD_INT 0
15136: PPUSH
// if not hinty_co_byli then
15137: LD_EXP 65
15141: NOT
15142: IFFALSE 15151
// hinty_co_byli := [ ] ;
15144: LD_ADDR_EXP 65
15148: PUSH
15149: EMPTY
15150: ST_TO_ADDR
// if not ( ident in hinty_co_byli ) then
15151: LD_VAR 0 1
15155: PUSH
15156: LD_EXP 65
15160: IN
15161: NOT
15162: IFFALSE 15189
// begin hinty_co_byli := hinty_co_byli ^ ident ;
15164: LD_ADDR_EXP 65
15168: PUSH
15169: LD_EXP 65
15173: PUSH
15174: LD_VAR 0 1
15178: ADD
15179: ST_TO_ADDR
// Hint ( ident ) ;
15180: LD_VAR 0 1
15184: PPUSH
15185: CALL_OW 339
// end ; end ;
15189: LD_VAR 0 2
15193: RET
