// export MacMillan , Burlak , Joan , ru_sci , Powell , Stevens , truck1 , truck2 ; export blast_was_seen , lab_destroyed , time_out , entered_contaminated_area , original_stevens , blast_time , technology_taken , keep_base_finished ; export you , americans ; export time_to_complete , ru_artefact ; function prepare_units ; var JMM_car , Bur_car , JMM_load , Bur_load ; begin
   0: LD_INT 0
   2: PPUSH
   3: PPUSH
   4: PPUSH
   5: PPUSH
   6: PPUSH
// uc_nation := nation_american ;
   7: LD_ADDR_OWVAR 21
  11: PUSH
  12: LD_INT 1
  14: ST_TO_ADDR
// uc_side := you ;
  15: LD_ADDR_OWVAR 20
  19: PUSH
  20: LD_EXP 17
  24: ST_TO_ADDR
// MacMillan := CreateCharacter ( JMM ) ;
  25: LD_ADDR_EXP 1
  29: PUSH
  30: LD_STRING JMM
  32: PPUSH
  33: CALL_OW 34
  37: ST_TO_ADDR
// SetClass ( MacMillan , class_engineer ) ;
  38: LD_EXP 1
  42: PPUSH
  43: LD_INT 2
  45: PPUSH
  46: CALL_OW 336
// Burlak := CreateCharacter ( Burlak ) ;
  50: LD_ADDR_EXP 2
  54: PUSH
  55: LD_STRING Burlak
  57: PPUSH
  58: CALL_OW 34
  62: ST_TO_ADDR
// SetClass ( Burlak , class_mechanic ) ;
  63: LD_EXP 2
  67: PPUSH
  68: LD_INT 3
  70: PPUSH
  71: CALL_OW 336
// if TestCharacters ( Joan ) and CheckCharacterSet ( Joan ) then
  75: LD_STRING Joan
  77: PPUSH
  78: CALL_OW 28
  82: PUSH
  83: LD_STRING Joan
  85: PPUSH
  86: CALL_OW 29
  90: AND
  91: IFFALSE 108
// Joan := CreateCharacter ( Joan ) else
  93: LD_ADDR_EXP 3
  97: PUSH
  98: LD_STRING Joan
 100: PPUSH
 101: CALL_OW 34
 105: ST_TO_ADDR
 106: GO 144
// begin Joan := false ;
 108: LD_ADDR_EXP 3
 112: PUSH
 113: LD_INT 0
 115: ST_TO_ADDR
// uc_nation := nation_russian ;
 116: LD_ADDR_OWVAR 21
 120: PUSH
 121: LD_INT 3
 123: ST_TO_ADDR
// PrepareScientist ( sex_male , 8 ) ;
 124: LD_INT 1
 126: PPUSH
 127: LD_INT 8
 129: PPUSH
 130: CALL_OW 384
// ru_sci := CreateHuman ;
 134: LD_ADDR_EXP 4
 138: PUSH
 139: CALL_OW 44
 143: ST_TO_ADDR
// end ; uc_nation := nation_american ;
 144: LD_ADDR_OWVAR 21
 148: PUSH
 149: LD_INT 1
 151: ST_TO_ADDR
// uc_side := americans ;
 152: LD_ADDR_OWVAR 20
 156: PUSH
 157: LD_EXP 18
 161: ST_TO_ADDR
// Powell := CreateCharacter ( Powell ) ;
 162: LD_ADDR_EXP 5
 166: PUSH
 167: LD_STRING Powell
 169: PPUSH
 170: CALL_OW 34
 174: ST_TO_ADDR
// if TestCharacters ( Stevens ) and CheckCharacterSet ( Stevens ) then
 175: LD_STRING Stevens
 177: PPUSH
 178: CALL_OW 28
 182: PUSH
 183: LD_STRING Stevens
 185: PPUSH
 186: CALL_OW 29
 190: AND
 191: IFFALSE 216
// begin Stevens := CreateCharacter ( Stevens ) ;
 193: LD_ADDR_EXP 6
 197: PUSH
 198: LD_STRING Stevens
 200: PPUSH
 201: CALL_OW 34
 205: ST_TO_ADDR
// original_stevens := true ;
 206: LD_ADDR_EXP 13
 210: PUSH
 211: LD_INT 1
 213: ST_TO_ADDR
// end else
 214: GO 252
// begin uc_nation := nation_american ;
 216: LD_ADDR_OWVAR 21
 220: PUSH
 221: LD_INT 1
 223: ST_TO_ADDR
// PrepareScientist ( sex_male , 8 ) ;
 224: LD_INT 1
 226: PPUSH
 227: LD_INT 8
 229: PPUSH
 230: CALL_OW 384
// Stevens := CreateHuman ;
 234: LD_ADDR_EXP 6
 238: PUSH
 239: CALL_OW 44
 243: ST_TO_ADDR
// original_stevens := false ;
 244: LD_ADDR_EXP 13
 248: PUSH
 249: LD_INT 0
 251: ST_TO_ADDR
// end ; uc_side = you ;
 252: LD_ADDR_OWVAR 20
 256: PUSH
 257: LD_EXP 17
 261: ST_TO_ADDR
// uc_nation := nation_american ;
 262: LD_ADDR_OWVAR 21
 266: PUSH
 267: LD_INT 1
 269: ST_TO_ADDR
// uc_direction := 5 ;
 270: LD_ADDR_OWVAR 24
 274: PUSH
 275: LD_INT 5
 277: ST_TO_ADDR
// JMM_car := LoadVariable ( JMM_car , [ us_medium_tracked , engine_combustion , control_manual , us_cargo_bay ] ) ;
 278: LD_ADDR_VAR 0 2
 282: PUSH
 283: LD_STRING JMM_car
 285: PPUSH
 286: LD_INT 3
 288: PUSH
 289: LD_INT 1
 291: PUSH
 292: LD_INT 1
 294: PUSH
 295: LD_INT 12
 297: PUSH
 298: EMPTY
 299: LIST
 300: LIST
 301: LIST
 302: LIST
 303: PPUSH
 304: CALL_OW 30
 308: ST_TO_ADDR
// JMM_load := LoadVariable ( JMM_car_load , 0 ) ;
 309: LD_ADDR_VAR 0 4
 313: PUSH
 314: LD_STRING JMM_car_load
 316: PPUSH
 317: LD_INT 0
 319: PPUSH
 320: CALL_OW 30
 324: ST_TO_ADDR
// if JMM_car [ 1 ] in [ us_light_wheeled , us_medium_wheeled , us_medium_tracked , us_heavy_tracked , us_morphling ] then
 325: LD_VAR 0 2
 329: PUSH
 330: LD_INT 1
 332: ARRAY
 333: PUSH
 334: LD_INT 1
 336: PUSH
 337: LD_INT 2
 339: PUSH
 340: LD_INT 3
 342: PUSH
 343: LD_INT 4
 345: PUSH
 346: LD_INT 5
 348: PUSH
 349: EMPTY
 350: LIST
 351: LIST
 352: LIST
 353: LIST
 354: LIST
 355: IN
 356: IFFALSE 368
// uc_nation := nation_american else
 358: LD_ADDR_OWVAR 21
 362: PUSH
 363: LD_INT 1
 365: ST_TO_ADDR
 366: GO 376
// uc_nation := nation_russian ;
 368: LD_ADDR_OWVAR 21
 372: PUSH
 373: LD_INT 3
 375: ST_TO_ADDR
// vc_chassis := JMM_car [ 1 ] ;
 376: LD_ADDR_OWVAR 37
 380: PUSH
 381: LD_VAR 0 2
 385: PUSH
 386: LD_INT 1
 388: ARRAY
 389: ST_TO_ADDR
// vc_engine := JMM_car [ 2 ] ;
 390: LD_ADDR_OWVAR 39
 394: PUSH
 395: LD_VAR 0 2
 399: PUSH
 400: LD_INT 2
 402: ARRAY
 403: ST_TO_ADDR
// vc_control := JMM_car [ 3 ] ;
 404: LD_ADDR_OWVAR 38
 408: PUSH
 409: LD_VAR 0 2
 413: PUSH
 414: LD_INT 3
 416: ARRAY
 417: ST_TO_ADDR
// vc_weapon := JMM_car [ 4 ] ;
 418: LD_ADDR_OWVAR 40
 422: PUSH
 423: LD_VAR 0 2
 427: PUSH
 428: LD_INT 4
 430: ARRAY
 431: ST_TO_ADDR
// truck1 := CreateVehicle ;
 432: LD_ADDR_EXP 7
 436: PUSH
 437: CALL_OW 45
 441: ST_TO_ADDR
// if JMM_load > 0 then
 442: LD_VAR 0 4
 446: PUSH
 447: LD_INT 0
 449: GREATER
 450: IFFALSE 469
// SetCargo ( truck1 , mat_oil , JMM_load ) ;
 452: LD_EXP 7
 456: PPUSH
 457: LD_INT 2
 459: PPUSH
 460: LD_VAR 0 4
 464: PPUSH
 465: CALL_OW 290
// Bur_car := LoadVariable ( Bur_car , [ ru_medium_tracked , engine_combustion , control_manual , ru_gatling_gun ] ) ;
 469: LD_ADDR_VAR 0 3
 473: PUSH
 474: LD_STRING Bur_car
 476: PPUSH
 477: LD_INT 22
 479: PUSH
 480: LD_INT 1
 482: PUSH
 483: LD_INT 1
 485: PUSH
 486: LD_INT 43
 488: PUSH
 489: EMPTY
 490: LIST
 491: LIST
 492: LIST
 493: LIST
 494: PPUSH
 495: CALL_OW 30
 499: ST_TO_ADDR
// Bur_load := LoadVariable ( Bur_car_load , 0 ) ;
 500: LD_ADDR_VAR 0 5
 504: PUSH
 505: LD_STRING Bur_car_load
 507: PPUSH
 508: LD_INT 0
 510: PPUSH
 511: CALL_OW 30
 515: ST_TO_ADDR
// if Bur_car [ 1 ] in [ ru_medium_wheeled , ru_medium_tracked , ru_heavy_wheeled , ru_heavy_tracked ] then
 516: LD_VAR 0 3
 520: PUSH
 521: LD_INT 1
 523: ARRAY
 524: PUSH
 525: LD_INT 21
 527: PUSH
 528: LD_INT 22
 530: PUSH
 531: LD_INT 23
 533: PUSH
 534: LD_INT 24
 536: PUSH
 537: EMPTY
 538: LIST
 539: LIST
 540: LIST
 541: LIST
 542: IN
 543: IFFALSE 555
// uc_nation := nation_russian else
 545: LD_ADDR_OWVAR 21
 549: PUSH
 550: LD_INT 3
 552: ST_TO_ADDR
 553: GO 563
// uc_nation := nation_american ;
 555: LD_ADDR_OWVAR 21
 559: PUSH
 560: LD_INT 1
 562: ST_TO_ADDR
// vc_chassis := Bur_car [ 1 ] ;
 563: LD_ADDR_OWVAR 37
 567: PUSH
 568: LD_VAR 0 3
 572: PUSH
 573: LD_INT 1
 575: ARRAY
 576: ST_TO_ADDR
// vc_engine := Bur_car [ 2 ] ;
 577: LD_ADDR_OWVAR 39
 581: PUSH
 582: LD_VAR 0 3
 586: PUSH
 587: LD_INT 2
 589: ARRAY
 590: ST_TO_ADDR
// vc_control := Bur_car [ 3 ] ;
 591: LD_ADDR_OWVAR 38
 595: PUSH
 596: LD_VAR 0 3
 600: PUSH
 601: LD_INT 3
 603: ARRAY
 604: ST_TO_ADDR
// vc_weapon := Bur_car [ 4 ] ;
 605: LD_ADDR_OWVAR 40
 609: PUSH
 610: LD_VAR 0 3
 614: PUSH
 615: LD_INT 4
 617: ARRAY
 618: ST_TO_ADDR
// truck2 := CreateVehicle ;
 619: LD_ADDR_EXP 8
 623: PUSH
 624: CALL_OW 45
 628: ST_TO_ADDR
// if Bur_load > 0 then
 629: LD_VAR 0 5
 633: PUSH
 634: LD_INT 0
 636: GREATER
 637: IFFALSE 656
// SetCargo ( truck2 , mat_oil , Bur_load ) ;
 639: LD_EXP 8
 643: PPUSH
 644: LD_INT 2
 646: PPUSH
 647: LD_VAR 0 5
 651: PPUSH
 652: CALL_OW 290
// PlaceHumanInUnit ( MacMillan , truck1 ) ;
 656: LD_EXP 1
 660: PPUSH
 661: LD_EXP 7
 665: PPUSH
 666: CALL_OW 52
// PlaceHumanInUnit ( Burlak , truck2 ) ;
 670: LD_EXP 2
 674: PPUSH
 675: LD_EXP 8
 679: PPUSH
 680: CALL_OW 52
// PlaceUnitXY ( truck1 , 200 , 86 , false ) ;
 684: LD_EXP 7
 688: PPUSH
 689: LD_INT 200
 691: PPUSH
 692: LD_INT 86
 694: PPUSH
 695: LD_INT 0
 697: PPUSH
 698: CALL_OW 48
// PlaceUnitXY ( truck2 , 202 , 90 , false ) ;
 702: LD_EXP 8
 706: PPUSH
 707: LD_INT 202
 709: PPUSH
 710: LD_INT 90
 712: PPUSH
 713: LD_INT 0
 715: PPUSH
 716: CALL_OW 48
// ComFree ( [ MacMillan , Burlak ] ) ;
 720: LD_EXP 1
 724: PUSH
 725: LD_EXP 2
 729: PUSH
 730: EMPTY
 731: LIST
 732: LIST
 733: PPUSH
 734: CALL_OW 139
// end ;
 738: LD_VAR 0 1
 742: RET
// function prepare_sides ; begin
 743: LD_INT 0
 745: PPUSH
// you = 7 ;
 746: LD_ADDR_EXP 17
 750: PUSH
 751: LD_INT 7
 753: ST_TO_ADDR
// americans = 1 ;
 754: LD_ADDR_EXP 18
 758: PUSH
 759: LD_INT 1
 761: ST_TO_ADDR
// SetAttitude ( you , americans , att_enemy , true ) ;
 762: LD_EXP 17
 766: PPUSH
 767: LD_EXP 18
 771: PPUSH
 772: LD_INT 2
 774: PPUSH
 775: LD_INT 1
 777: PPUSH
 778: CALL_OW 80
// blast_was_seen := false ;
 782: LD_ADDR_EXP 9
 786: PUSH
 787: LD_INT 0
 789: ST_TO_ADDR
// time_out := false ;
 790: LD_ADDR_EXP 11
 794: PUSH
 795: LD_INT 0
 797: ST_TO_ADDR
// entered_contaminated_area := false ;
 798: LD_ADDR_EXP 12
 802: PUSH
 803: LD_INT 0
 805: ST_TO_ADDR
// blast_countdown := false ;
 806: LD_ADDR_EXP 27
 810: PUSH
 811: LD_INT 0
 813: ST_TO_ADDR
// lab_destroyed := false ;
 814: LD_ADDR_EXP 10
 818: PUSH
 819: LD_INT 0
 821: ST_TO_ADDR
// technology_taken := false ;
 822: LD_ADDR_EXP 15
 826: PUSH
 827: LD_INT 0
 829: ST_TO_ADDR
// time_to_complete := [ 15 15$0 , 10 10$0 , 8 8$0 ] [ difficulty ] ;
 830: LD_ADDR_EXP 19
 834: PUSH
 835: LD_INT 31500
 837: PUSH
 838: LD_INT 21000
 840: PUSH
 841: LD_INT 16800
 843: PUSH
 844: EMPTY
 845: LIST
 846: LIST
 847: LIST
 848: PUSH
 849: LD_OWVAR 67
 853: ARRAY
 854: ST_TO_ADDR
// ru_artefact := 4 ;
 855: LD_ADDR_EXP 20
 859: PUSH
 860: LD_INT 4
 862: ST_TO_ADDR
// blast_done := false ;
 863: LD_ADDR_EXP 28
 867: PUSH
 868: LD_INT 0
 870: ST_TO_ADDR
// query_started := false ;
 871: LD_ADDR_EXP 29
 875: PUSH
 876: LD_INT 0
 878: ST_TO_ADDR
// dokecano := false ;
 879: LD_ADDR_EXP 33
 883: PUSH
 884: LD_INT 0
 886: ST_TO_ADDR
// art_picked := false ;
 887: LD_ADDR_EXP 31
 891: PUSH
 892: LD_INT 0
 894: ST_TO_ADDR
// art_cargo := false ;
 895: LD_ADDR_EXP 32
 899: PUSH
 900: LD_INT 0
 902: ST_TO_ADDR
// disable ( 1 ) ;
 903: LD_INT 1
 905: DISABLE_MARKED
// disable ( 2 ) ;
 906: LD_INT 2
 908: DISABLE_MARKED
// disable ( 3 ) ;
 909: LD_INT 3
 911: DISABLE_MARKED
// disable ( 4 ) ;
 912: LD_INT 4
 914: DISABLE_MARKED
// disable ( 5 ) ;
 915: LD_INT 5
 917: DISABLE_MARKED
// disable ( 6 ) ;
 918: LD_INT 6
 920: DISABLE_MARKED
// disable ( 7 ) ;
 921: LD_INT 7
 923: DISABLE_MARKED
// disable ( 8 ) ;
 924: LD_INT 8
 926: DISABLE_MARKED
// disable ( 9 ) ;
 927: LD_INT 9
 929: DISABLE_MARKED
// disable ( 10 ) ;
 930: LD_INT 10
 932: DISABLE_MARKED
// end ;
 933: LD_VAR 0 1
 937: RET
// starting begin prepare_sides ;
 938: CALL 743 0 0
// prepare_units ;
 942: CALL 0 0 0
// prepare_us_side ;
 946: CALL 2956 0 0
// starting_scene ;
 950: CALL 4471 0 0
// end ;
 954: END
// export function konec_mise ; var un , JMM_car , Bur_car , medal1 , medal2 , medal3 ; begin
 955: LD_INT 0
 957: PPUSH
 958: PPUSH
 959: PPUSH
 960: PPUSH
 961: PPUSH
 962: PPUSH
 963: PPUSH
// medal1 := blast_was_seen > 0 ;
 964: LD_ADDR_VAR 0 5
 968: PUSH
 969: LD_EXP 9
 973: PUSH
 974: LD_INT 0
 976: GREATER
 977: ST_TO_ADDR
// medal2 := entered_contaminated_area > 0 ;
 978: LD_ADDR_VAR 0 6
 982: PUSH
 983: LD_EXP 12
 987: PUSH
 988: LD_INT 0
 990: GREATER
 991: ST_TO_ADDR
// medal3 := ( TICK - blast_time ) < time_to_complete ;
 992: LD_ADDR_VAR 0 7
 996: PUSH
 997: LD_OWVAR 1
1001: PUSH
1002: LD_EXP 14
1006: MINUS
1007: PUSH
1008: LD_EXP 19
1012: LESS
1013: ST_TO_ADDR
// AddMedal ( Explosion , blast_was_seen ) ;
1014: LD_STRING Explosion
1016: PPUSH
1017: LD_EXP 9
1021: PPUSH
1022: CALL_OW 101
// AddMedal ( BioHazard , entered_contaminated_area ) ;
1026: LD_STRING BioHazard
1028: PPUSH
1029: LD_EXP 12
1033: PPUSH
1034: CALL_OW 101
// AddMedal ( Speed , ( TICK - blast_time ) < time_to_complete ) ;
1038: LD_STRING Speed
1040: PPUSH
1041: LD_OWVAR 1
1045: PUSH
1046: LD_EXP 14
1050: MINUS
1051: PUSH
1052: LD_EXP 19
1056: LESS
1057: PPUSH
1058: CALL_OW 101
// SA_EndMission ( 4 , 3 , medal1 , medal2 , medal3 ) ;
1062: LD_INT 4
1064: PPUSH
1065: LD_INT 3
1067: PPUSH
1068: LD_VAR 0 5
1072: PPUSH
1073: LD_VAR 0 6
1077: PPUSH
1078: LD_VAR 0 7
1082: PPUSH
1083: CALL 7710 0 5
// GiveMedals ( Main ) ;
1087: LD_STRING Main
1089: PPUSH
1090: CALL_OW 102
// RewardPeople ( [ Burlak , MacMillan ] ) ;
1094: LD_EXP 2
1098: PUSH
1099: LD_EXP 1
1103: PUSH
1104: EMPTY
1105: LIST
1106: LIST
1107: PPUSH
1108: CALL_OW 43
// SaveCharacters ( MacMillan , JMM ) ;
1112: LD_EXP 1
1116: PPUSH
1117: LD_STRING JMM
1119: PPUSH
1120: CALL_OW 38
// SaveCharacters ( Burlak , Burlak ) ;
1124: LD_EXP 2
1128: PPUSH
1129: LD_STRING Burlak
1131: PPUSH
1132: CALL_OW 38
// un := IsInUnit ( MacMillan ) ;
1136: LD_ADDR_VAR 0 2
1140: PUSH
1141: LD_EXP 1
1145: PPUSH
1146: CALL_OW 310
1150: ST_TO_ADDR
// if un and ( GetType ( un ) = unit_vehicle ) then
1151: LD_VAR 0 2
1155: PUSH
1156: LD_VAR 0 2
1160: PPUSH
1161: CALL_OW 247
1165: PUSH
1166: LD_INT 2
1168: EQUAL
1169: AND
1170: IFFALSE 1237
// begin JMM_car := [ GetChassis ( un ) , GetEngine ( un ) , GetControl ( un ) , GetWeapon ( un ) ] ;
1172: LD_ADDR_VAR 0 3
1176: PUSH
1177: LD_VAR 0 2
1181: PPUSH
1182: CALL_OW 265
1186: PUSH
1187: LD_VAR 0 2
1191: PPUSH
1192: CALL_OW 262
1196: PUSH
1197: LD_VAR 0 2
1201: PPUSH
1202: CALL_OW 263
1206: PUSH
1207: LD_VAR 0 2
1211: PPUSH
1212: CALL_OW 264
1216: PUSH
1217: EMPTY
1218: LIST
1219: LIST
1220: LIST
1221: LIST
1222: ST_TO_ADDR
// SaveVariable ( JMM_car , JMM_car ) ;
1223: LD_VAR 0 3
1227: PPUSH
1228: LD_STRING JMM_car
1230: PPUSH
1231: CALL_OW 39
// end else
1235: GO 1244
// DeleteVariable ( JMM_car ) ;
1237: LD_STRING JMM_car
1239: PPUSH
1240: CALL_OW 41
// un := IsInUnit ( Burlak ) ;
1244: LD_ADDR_VAR 0 2
1248: PUSH
1249: LD_EXP 2
1253: PPUSH
1254: CALL_OW 310
1258: ST_TO_ADDR
// if un and ( GetType ( un ) = unit_vehicle ) then
1259: LD_VAR 0 2
1263: PUSH
1264: LD_VAR 0 2
1268: PPUSH
1269: CALL_OW 247
1273: PUSH
1274: LD_INT 2
1276: EQUAL
1277: AND
1278: IFFALSE 1345
// begin Bur_car := [ GetChassis ( un ) , GetEngine ( un ) , GetControl ( un ) , GetWeapon ( un ) ] ;
1280: LD_ADDR_VAR 0 4
1284: PUSH
1285: LD_VAR 0 2
1289: PPUSH
1290: CALL_OW 265
1294: PUSH
1295: LD_VAR 0 2
1299: PPUSH
1300: CALL_OW 262
1304: PUSH
1305: LD_VAR 0 2
1309: PPUSH
1310: CALL_OW 263
1314: PUSH
1315: LD_VAR 0 2
1319: PPUSH
1320: CALL_OW 264
1324: PUSH
1325: EMPTY
1326: LIST
1327: LIST
1328: LIST
1329: LIST
1330: ST_TO_ADDR
// SaveVariable ( Bur_car , Bur_car ) ;
1331: LD_VAR 0 4
1335: PPUSH
1336: LD_STRING Bur_car
1338: PPUSH
1339: CALL_OW 39
// end else
1343: GO 1352
// DeleteVariable ( Bur_car ) ;
1345: LD_STRING Bur_car
1347: PPUSH
1348: CALL_OW 41
// YouWin ;
1352: CALL_OW 103
// end ;
1356: LD_VAR 0 1
1360: RET
// export function Mission_Failed ( style ) ; begin
1361: LD_INT 0
1363: PPUSH
// case style of 1 :
1364: LD_VAR 0 1
1368: PUSH
1369: LD_INT 1
1371: DOUBLE
1372: EQUAL
1373: IFTRUE 1377
1375: GO 1387
1377: POP
// YouLost ( Burlak ) ; 2 :
1378: LD_STRING Burlak
1380: PPUSH
1381: CALL_OW 104
1385: GO 1478
1387: LD_INT 2
1389: DOUBLE
1390: EQUAL
1391: IFTRUE 1395
1393: GO 1405
1395: POP
// YouLost ( JMM ) ; 3 :
1396: LD_STRING JMM
1398: PPUSH
1399: CALL_OW 104
1403: GO 1478
1405: LD_INT 3
1407: DOUBLE
1408: EQUAL
1409: IFTRUE 1413
1411: GO 1423
1413: POP
// YouLost ( Time ) ; 4 :
1414: LD_STRING Time
1416: PPUSH
1417: CALL_OW 104
1421: GO 1478
1423: LD_INT 4
1425: DOUBLE
1426: EQUAL
1427: IFTRUE 1431
1429: GO 1441
1431: POP
// YouLost ( Artefact ) ; 5 :
1432: LD_STRING Artefact
1434: PPUSH
1435: CALL_OW 104
1439: GO 1478
1441: LD_INT 5
1443: DOUBLE
1444: EQUAL
1445: IFTRUE 1449
1447: GO 1459
1449: POP
// YouLost ( Lab ) ; 6 :
1450: LD_STRING Lab
1452: PPUSH
1453: CALL_OW 104
1457: GO 1478
1459: LD_INT 6
1461: DOUBLE
1462: EQUAL
1463: IFTRUE 1467
1465: GO 1477
1467: POP
// YouLost ( Cargo ) ; end ;
1468: LD_STRING Cargo
1470: PPUSH
1471: CALL_OW 104
1475: GO 1478
1477: POP
// end ; end_of_file
1478: LD_VAR 0 2
1482: RET
// export us_sol , us_sci , us_mech , us_all_units ; export us_patrol_1 , us_patrol_2 ; export blast_countdown ; every 0 0$1 marked 2 do var i , x , y , cesta ;
1483: GO 1485
1485: DISABLE
1486: LD_INT 0
1488: PPUSH
1489: PPUSH
1490: PPUSH
1491: PPUSH
// begin if difficulty < 3 then
1492: LD_OWVAR 67
1496: PUSH
1497: LD_INT 3
1499: LESS
1500: IFFALSE 1639
// cesta := [ 101 , 39 , 124 , 31 , 123 , 7 , 158 , 21 , 168 , 40 , 168 , 65 , 167 , 90 , 146 , 83 , 146 , 83 , 167 , 90 , 168 , 65 , 168 , 40 , 158 , 21 , 123 , 7 , 124 , 31 , 101 , 39 ] else
1502: LD_ADDR_VAR 0 4
1506: PUSH
1507: LD_INT 101
1509: PUSH
1510: LD_INT 39
1512: PUSH
1513: LD_INT 124
1515: PUSH
1516: LD_INT 31
1518: PUSH
1519: LD_INT 123
1521: PUSH
1522: LD_INT 7
1524: PUSH
1525: LD_INT 158
1527: PUSH
1528: LD_INT 21
1530: PUSH
1531: LD_INT 168
1533: PUSH
1534: LD_INT 40
1536: PUSH
1537: LD_INT 168
1539: PUSH
1540: LD_INT 65
1542: PUSH
1543: LD_INT 167
1545: PUSH
1546: LD_INT 90
1548: PUSH
1549: LD_INT 146
1551: PUSH
1552: LD_INT 83
1554: PUSH
1555: LD_INT 146
1557: PUSH
1558: LD_INT 83
1560: PUSH
1561: LD_INT 167
1563: PUSH
1564: LD_INT 90
1566: PUSH
1567: LD_INT 168
1569: PUSH
1570: LD_INT 65
1572: PUSH
1573: LD_INT 168
1575: PUSH
1576: LD_INT 40
1578: PUSH
1579: LD_INT 158
1581: PUSH
1582: LD_INT 21
1584: PUSH
1585: LD_INT 123
1587: PUSH
1588: LD_INT 7
1590: PUSH
1591: LD_INT 124
1593: PUSH
1594: LD_INT 31
1596: PUSH
1597: LD_INT 101
1599: PUSH
1600: LD_INT 39
1602: PUSH
1603: EMPTY
1604: LIST
1605: LIST
1606: LIST
1607: LIST
1608: LIST
1609: LIST
1610: LIST
1611: LIST
1612: LIST
1613: LIST
1614: LIST
1615: LIST
1616: LIST
1617: LIST
1618: LIST
1619: LIST
1620: LIST
1621: LIST
1622: LIST
1623: LIST
1624: LIST
1625: LIST
1626: LIST
1627: LIST
1628: LIST
1629: LIST
1630: LIST
1631: LIST
1632: LIST
1633: LIST
1634: LIST
1635: LIST
1636: ST_TO_ADDR
1637: GO 1710
// cesta := [ 101 , 39 , 124 , 31 , 123 , 7 , 135 , 7 , 135 , 7 , 123 , 7 , 124 , 31 , 101 , 39 ] ;
1639: LD_ADDR_VAR 0 4
1643: PUSH
1644: LD_INT 101
1646: PUSH
1647: LD_INT 39
1649: PUSH
1650: LD_INT 124
1652: PUSH
1653: LD_INT 31
1655: PUSH
1656: LD_INT 123
1658: PUSH
1659: LD_INT 7
1661: PUSH
1662: LD_INT 135
1664: PUSH
1665: LD_INT 7
1667: PUSH
1668: LD_INT 135
1670: PUSH
1671: LD_INT 7
1673: PUSH
1674: LD_INT 123
1676: PUSH
1677: LD_INT 7
1679: PUSH
1680: LD_INT 124
1682: PUSH
1683: LD_INT 31
1685: PUSH
1686: LD_INT 101
1688: PUSH
1689: LD_INT 39
1691: PUSH
1692: EMPTY
1693: LIST
1694: LIST
1695: LIST
1696: LIST
1697: LIST
1698: LIST
1699: LIST
1700: LIST
1701: LIST
1702: LIST
1703: LIST
1704: LIST
1705: LIST
1706: LIST
1707: LIST
1708: LIST
1709: ST_TO_ADDR
// repeat for i = 1 to ( cesta div 2 ) do
1710: LD_ADDR_VAR 0 1
1714: PUSH
1715: DOUBLE
1716: LD_INT 1
1718: DEC
1719: ST_TO_ADDR
1720: LD_VAR 0 4
1724: PUSH
1725: LD_INT 2
1727: DIV
1728: PUSH
1729: FOR_TO
1730: IFFALSE 1854
// begin x := cesta [ ( i * 2 ) - 1 ] ;
1732: LD_ADDR_VAR 0 2
1736: PUSH
1737: LD_VAR 0 4
1741: PUSH
1742: LD_VAR 0 1
1746: PUSH
1747: LD_INT 2
1749: MUL
1750: PUSH
1751: LD_INT 1
1753: MINUS
1754: ARRAY
1755: ST_TO_ADDR
// y := cesta [ ( i * 2 ) ] ;
1756: LD_ADDR_VAR 0 3
1760: PUSH
1761: LD_VAR 0 4
1765: PUSH
1766: LD_VAR 0 1
1770: PUSH
1771: LD_INT 2
1773: MUL
1774: ARRAY
1775: ST_TO_ADDR
// ComAgressiveMove ( us_patrol_1 , x , y ) ;
1776: LD_EXP 25
1780: PPUSH
1781: LD_VAR 0 2
1785: PPUSH
1786: LD_VAR 0 3
1790: PPUSH
1791: CALL_OW 114
// repeat wait ( 0 0$3 ) ;
1795: LD_INT 105
1797: PPUSH
1798: CALL_OW 67
// y := true ;
1802: LD_ADDR_VAR 0 3
1806: PUSH
1807: LD_INT 1
1809: ST_TO_ADDR
// for x in us_patrol_1 do
1810: LD_ADDR_VAR 0 2
1814: PUSH
1815: LD_EXP 25
1819: PUSH
1820: FOR_IN
1821: IFFALSE 1844
// if IsBusy ( x ) then
1823: LD_VAR 0 2
1827: PPUSH
1828: CALL_OW 315
1832: IFFALSE 1842
// y := false ;
1834: LD_ADDR_VAR 0 3
1838: PUSH
1839: LD_INT 0
1841: ST_TO_ADDR
1842: GO 1820
1844: POP
1845: POP
// until y ;
1846: LD_VAR 0 3
1850: IFFALSE 1795
// end ;
1852: GO 1729
1854: POP
1855: POP
// until ( not us_patrol_1 ) or ( blast_countdown ) ;
1856: LD_EXP 25
1860: NOT
1861: PUSH
1862: LD_EXP 27
1866: OR
1867: IFFALSE 1710
// if us_patrol_1 then
1869: LD_EXP 25
1873: IFFALSE 1913
// begin ComAgressiveMove ( us_patrol_1 , 56 , 77 ) ;
1875: LD_EXP 25
1879: PPUSH
1880: LD_INT 56
1882: PPUSH
1883: LD_INT 77
1885: PPUSH
1886: CALL_OW 114
// us_sol := us_sol ^ us_patrol_1 ;
1890: LD_ADDR_EXP 21
1894: PUSH
1895: LD_EXP 21
1899: PUSH
1900: LD_EXP 25
1904: ADD
1905: ST_TO_ADDR
// us_patrol_1 := [ ] ;
1906: LD_ADDR_EXP 25
1910: PUSH
1911: EMPTY
1912: ST_TO_ADDR
// end ; end ;
1913: PPOPN 4
1915: END
// every 0 0$1 marked 3 do var i , x , y , cesta ;
1916: GO 1918
1918: DISABLE
1919: LD_INT 0
1921: PPUSH
1922: PPUSH
1923: PPUSH
1924: PPUSH
// begin cesta := [ 135 , 7 , 158 , 21 , 168 , 40 , 168 , 65 , 167 , 90 , 146 , 83 , 146 , 83 , 167 , 90 , 168 , 65 , 168 , 40 , 158 , 21 , 135 , 7 ] ;
1925: LD_ADDR_VAR 0 4
1929: PUSH
1930: LD_INT 135
1932: PUSH
1933: LD_INT 7
1935: PUSH
1936: LD_INT 158
1938: PUSH
1939: LD_INT 21
1941: PUSH
1942: LD_INT 168
1944: PUSH
1945: LD_INT 40
1947: PUSH
1948: LD_INT 168
1950: PUSH
1951: LD_INT 65
1953: PUSH
1954: LD_INT 167
1956: PUSH
1957: LD_INT 90
1959: PUSH
1960: LD_INT 146
1962: PUSH
1963: LD_INT 83
1965: PUSH
1966: LD_INT 146
1968: PUSH
1969: LD_INT 83
1971: PUSH
1972: LD_INT 167
1974: PUSH
1975: LD_INT 90
1977: PUSH
1978: LD_INT 168
1980: PUSH
1981: LD_INT 65
1983: PUSH
1984: LD_INT 168
1986: PUSH
1987: LD_INT 40
1989: PUSH
1990: LD_INT 158
1992: PUSH
1993: LD_INT 21
1995: PUSH
1996: LD_INT 135
1998: PUSH
1999: LD_INT 7
2001: PUSH
2002: EMPTY
2003: LIST
2004: LIST
2005: LIST
2006: LIST
2007: LIST
2008: LIST
2009: LIST
2010: LIST
2011: LIST
2012: LIST
2013: LIST
2014: LIST
2015: LIST
2016: LIST
2017: LIST
2018: LIST
2019: LIST
2020: LIST
2021: LIST
2022: LIST
2023: LIST
2024: LIST
2025: LIST
2026: LIST
2027: ST_TO_ADDR
// repeat for i = 1 to ( cesta div 2 ) do
2028: LD_ADDR_VAR 0 1
2032: PUSH
2033: DOUBLE
2034: LD_INT 1
2036: DEC
2037: ST_TO_ADDR
2038: LD_VAR 0 4
2042: PUSH
2043: LD_INT 2
2045: DIV
2046: PUSH
2047: FOR_TO
2048: IFFALSE 2172
// begin x := cesta [ ( i * 2 ) - 1 ] ;
2050: LD_ADDR_VAR 0 2
2054: PUSH
2055: LD_VAR 0 4
2059: PUSH
2060: LD_VAR 0 1
2064: PUSH
2065: LD_INT 2
2067: MUL
2068: PUSH
2069: LD_INT 1
2071: MINUS
2072: ARRAY
2073: ST_TO_ADDR
// y := cesta [ ( i * 2 ) ] ;
2074: LD_ADDR_VAR 0 3
2078: PUSH
2079: LD_VAR 0 4
2083: PUSH
2084: LD_VAR 0 1
2088: PUSH
2089: LD_INT 2
2091: MUL
2092: ARRAY
2093: ST_TO_ADDR
// ComAgressiveMove ( us_patrol_2 , x , y ) ;
2094: LD_EXP 26
2098: PPUSH
2099: LD_VAR 0 2
2103: PPUSH
2104: LD_VAR 0 3
2108: PPUSH
2109: CALL_OW 114
// repeat wait ( 0 0$3 ) ;
2113: LD_INT 105
2115: PPUSH
2116: CALL_OW 67
// y := true ;
2120: LD_ADDR_VAR 0 3
2124: PUSH
2125: LD_INT 1
2127: ST_TO_ADDR
// for x in us_patrol_2 do
2128: LD_ADDR_VAR 0 2
2132: PUSH
2133: LD_EXP 26
2137: PUSH
2138: FOR_IN
2139: IFFALSE 2162
// if IsBusy ( x ) then
2141: LD_VAR 0 2
2145: PPUSH
2146: CALL_OW 315
2150: IFFALSE 2160
// y := false ;
2152: LD_ADDR_VAR 0 3
2156: PUSH
2157: LD_INT 0
2159: ST_TO_ADDR
2160: GO 2138
2162: POP
2163: POP
// until y ;
2164: LD_VAR 0 3
2168: IFFALSE 2113
// end ;
2170: GO 2047
2172: POP
2173: POP
// until ( not us_patrol_2 ) or ( blast_countdown ) ;
2174: LD_EXP 26
2178: NOT
2179: PUSH
2180: LD_EXP 27
2184: OR
2185: IFFALSE 2028
// if us_patrol_2 then
2187: LD_EXP 26
2191: IFFALSE 2231
// begin ComAgressiveMove ( us_patrol_2 , 56 , 77 ) ;
2193: LD_EXP 26
2197: PPUSH
2198: LD_INT 56
2200: PPUSH
2201: LD_INT 77
2203: PPUSH
2204: CALL_OW 114
// us_sol := us_sol ^ us_patrol_2 ;
2208: LD_ADDR_EXP 21
2212: PUSH
2213: LD_EXP 21
2217: PUSH
2218: LD_EXP 26
2222: ADD
2223: ST_TO_ADDR
// us_patrol_2 := [ ] ;
2224: LD_ADDR_EXP 26
2228: PUSH
2229: EMPTY
2230: ST_TO_ADDR
// end ; end ;
2231: PPOPN 4
2233: END
// function prepare_us_patrol ; var i , un , done , sol_lev ; begin
2234: LD_INT 0
2236: PPUSH
2237: PPUSH
2238: PPUSH
2239: PPUSH
2240: PPUSH
// done := 0 ;
2241: LD_ADDR_VAR 0 4
2245: PUSH
2246: LD_INT 0
2248: ST_TO_ADDR
// sol_lev := [ 4 , 5 , 8 ] [ difficulty ] ;
2249: LD_ADDR_VAR 0 5
2253: PUSH
2254: LD_INT 4
2256: PUSH
2257: LD_INT 5
2259: PUSH
2260: LD_INT 8
2262: PUSH
2263: EMPTY
2264: LIST
2265: LIST
2266: LIST
2267: PUSH
2268: LD_OWVAR 67
2272: ARRAY
2273: ST_TO_ADDR
// us_patrol_1 := [ ] ;
2274: LD_ADDR_EXP 25
2278: PUSH
2279: EMPTY
2280: ST_TO_ADDR
// us_patrol_2 := [ ] ;
2281: LD_ADDR_EXP 26
2285: PUSH
2286: EMPTY
2287: ST_TO_ADDR
// uc_nation := nation_american ;
2288: LD_ADDR_OWVAR 21
2292: PUSH
2293: LD_INT 1
2295: ST_TO_ADDR
// uc_side := americans ;
2296: LD_ADDR_OWVAR 20
2300: PUSH
2301: LD_EXP 18
2305: ST_TO_ADDR
// for i = 1 to ( difficulty + 1 ) do
2306: LD_ADDR_VAR 0 2
2310: PUSH
2311: DOUBLE
2312: LD_INT 1
2314: DEC
2315: ST_TO_ADDR
2316: LD_OWVAR 67
2320: PUSH
2321: LD_INT 1
2323: PLUS
2324: PUSH
2325: FOR_TO
2326: IFFALSE 2474
// begin done := done + 1 ;
2328: LD_ADDR_VAR 0 4
2332: PUSH
2333: LD_VAR 0 4
2337: PUSH
2338: LD_INT 1
2340: PLUS
2341: ST_TO_ADDR
// PrepareSoldier ( 0 , sol_lev + Rand ( 0 , 2 ) ) ;
2342: LD_INT 0
2344: PPUSH
2345: LD_VAR 0 5
2349: PUSH
2350: LD_INT 0
2352: PPUSH
2353: LD_INT 2
2355: PPUSH
2356: CALL_OW 12
2360: PLUS
2361: PPUSH
2362: CALL_OW 381
// un := CreateHuman ;
2366: LD_ADDR_VAR 0 3
2370: PUSH
2371: CALL_OW 44
2375: ST_TO_ADDR
// if ( difficulty = 3 ) and ( done > 2 ) then
2376: LD_OWVAR 67
2380: PUSH
2381: LD_INT 3
2383: EQUAL
2384: PUSH
2385: LD_VAR 0 4
2389: PUSH
2390: LD_INT 2
2392: GREATER
2393: AND
2394: IFFALSE 2435
// begin us_patrol_2 := us_patrol_2 ^ un ;
2396: LD_ADDR_EXP 26
2400: PUSH
2401: LD_EXP 26
2405: PUSH
2406: LD_VAR 0 3
2410: ADD
2411: ST_TO_ADDR
// PlaceUnitXYR ( un , 158 , 21 , 2 , false ) ;
2412: LD_VAR 0 3
2416: PPUSH
2417: LD_INT 158
2419: PPUSH
2420: LD_INT 21
2422: PPUSH
2423: LD_INT 2
2425: PPUSH
2426: LD_INT 0
2428: PPUSH
2429: CALL_OW 50
// end else
2433: GO 2472
// begin us_patrol_1 := us_patrol_1 ^ un ;
2435: LD_ADDR_EXP 25
2439: PUSH
2440: LD_EXP 25
2444: PUSH
2445: LD_VAR 0 3
2449: ADD
2450: ST_TO_ADDR
// PlaceUnitXYR ( un , 101 , 39 , 2 , false ) ;
2451: LD_VAR 0 3
2455: PPUSH
2456: LD_INT 101
2458: PPUSH
2459: LD_INT 39
2461: PPUSH
2462: LD_INT 2
2464: PPUSH
2465: LD_INT 0
2467: PPUSH
2468: CALL_OW 50
// end ; end ;
2472: GO 2325
2474: POP
2475: POP
// enable ( 2 ) ;
2476: LD_INT 2
2478: ENABLE_MARKED
// if difficulty = 3 then
2479: LD_OWVAR 67
2483: PUSH
2484: LD_INT 3
2486: EQUAL
2487: IFFALSE 2492
// enable ( 3 ) ;
2489: LD_INT 3
2491: ENABLE_MARKED
// end ;
2492: LD_VAR 0 1
2496: RET
// function prepare_us_base ; var i , un , b_list ; begin
2497: LD_INT 0
2499: PPUSH
2500: PPUSH
2501: PPUSH
2502: PPUSH
// us_sol := [ ] ;
2503: LD_ADDR_EXP 21
2507: PUSH
2508: EMPTY
2509: ST_TO_ADDR
// us_sci := [ ] ;
2510: LD_ADDR_EXP 22
2514: PUSH
2515: EMPTY
2516: ST_TO_ADDR
// uc_nation := nation_american ;
2517: LD_ADDR_OWVAR 21
2521: PUSH
2522: LD_INT 1
2524: ST_TO_ADDR
// uc_side := americans ;
2525: LD_ADDR_OWVAR 20
2529: PUSH
2530: LD_EXP 18
2534: ST_TO_ADDR
// for i = 1 to ( difficulty + 3 ) do
2535: LD_ADDR_VAR 0 2
2539: PUSH
2540: DOUBLE
2541: LD_INT 1
2543: DEC
2544: ST_TO_ADDR
2545: LD_OWVAR 67
2549: PUSH
2550: LD_INT 3
2552: PLUS
2553: PUSH
2554: FOR_TO
2555: IFFALSE 2633
// begin PrepareSoldier ( 0 , [ 3 , 6 , 9 ] [ difficulty ] ) ;
2557: LD_INT 0
2559: PPUSH
2560: LD_INT 3
2562: PUSH
2563: LD_INT 6
2565: PUSH
2566: LD_INT 9
2568: PUSH
2569: EMPTY
2570: LIST
2571: LIST
2572: LIST
2573: PUSH
2574: LD_OWVAR 67
2578: ARRAY
2579: PPUSH
2580: CALL_OW 381
// un := CreateHuman ;
2584: LD_ADDR_VAR 0 3
2588: PUSH
2589: CALL_OW 44
2593: ST_TO_ADDR
// us_sol := us_sol ^ un ;
2594: LD_ADDR_EXP 21
2598: PUSH
2599: LD_EXP 21
2603: PUSH
2604: LD_VAR 0 3
2608: ADD
2609: ST_TO_ADDR
// PlaceUnitXYR ( un , 55 , 75 , 4 , false ) ;
2610: LD_VAR 0 3
2614: PPUSH
2615: LD_INT 55
2617: PPUSH
2618: LD_INT 75
2620: PPUSH
2621: LD_INT 4
2623: PPUSH
2624: LD_INT 0
2626: PPUSH
2627: CALL_OW 50
// end ;
2631: GO 2554
2633: POP
2634: POP
// for i := 1 to 4 do
2635: LD_ADDR_VAR 0 2
2639: PUSH
2640: DOUBLE
2641: LD_INT 1
2643: DEC
2644: ST_TO_ADDR
2645: LD_INT 4
2647: PUSH
2648: FOR_TO
2649: IFFALSE 2716
// begin PrepareScientist ( sex_male , 6 + Rand ( 0 , 3 ) ) ;
2651: LD_INT 1
2653: PPUSH
2654: LD_INT 6
2656: PUSH
2657: LD_INT 0
2659: PPUSH
2660: LD_INT 3
2662: PPUSH
2663: CALL_OW 12
2667: PLUS
2668: PPUSH
2669: CALL_OW 384
// un := CreateHuman ;
2673: LD_ADDR_VAR 0 3
2677: PUSH
2678: CALL_OW 44
2682: ST_TO_ADDR
// us_sci := us_sci ^ un ;
2683: LD_ADDR_EXP 22
2687: PUSH
2688: LD_EXP 22
2692: PUSH
2693: LD_VAR 0 3
2697: ADD
2698: ST_TO_ADDR
// PlaceUnitArea ( un , us_base , false ) ;
2699: LD_VAR 0 3
2703: PPUSH
2704: LD_INT 1
2706: PPUSH
2707: LD_INT 0
2709: PPUSH
2710: CALL_OW 49
// end ;
2714: GO 2648
2716: POP
2717: POP
// PrepareMechanic ( 0 , [ 4 , 6 , 9 ] [ difficulty ] ) ;
2718: LD_INT 0
2720: PPUSH
2721: LD_INT 4
2723: PUSH
2724: LD_INT 6
2726: PUSH
2727: LD_INT 9
2729: PUSH
2730: EMPTY
2731: LIST
2732: LIST
2733: LIST
2734: PUSH
2735: LD_OWVAR 67
2739: ARRAY
2740: PPUSH
2741: CALL_OW 383
// us_mech := CreateHuman ;
2745: LD_ADDR_EXP 23
2749: PUSH
2750: CALL_OW 44
2754: ST_TO_ADDR
// PlaceUnitArea ( us_mech , am_repair , false ) ;
2755: LD_EXP 23
2759: PPUSH
2760: LD_INT 10
2762: PPUSH
2763: LD_INT 0
2765: PPUSH
2766: CALL_OW 49
// ComEnterUnit ( us_mech , crane ) ;
2770: LD_EXP 23
2774: PPUSH
2775: LD_INT 15
2777: PPUSH
2778: CALL_OW 120
// if Stevens then
2782: LD_EXP 6
2786: IFFALSE 2819
// begin PlaceUnitArea ( Stevens , us_base , false ) ;
2788: LD_EXP 6
2792: PPUSH
2793: LD_INT 1
2795: PPUSH
2796: LD_INT 0
2798: PPUSH
2799: CALL_OW 49
// us_sci := us_sci ^ Stevens ;
2803: LD_ADDR_EXP 22
2807: PUSH
2808: LD_EXP 22
2812: PUSH
2813: LD_EXP 6
2817: ADD
2818: ST_TO_ADDR
// end ; ComEnterUnit ( us_sci , us_lab ) ;
2819: LD_EXP 22
2823: PPUSH
2824: LD_INT 1
2826: PPUSH
2827: CALL_OW 120
// b_list := FilterAllUnits ( [ [ f_side , americans ] , [ f_btype , b_bunker ] ] ) ;
2831: LD_ADDR_VAR 0 4
2835: PUSH
2836: LD_INT 22
2838: PUSH
2839: LD_EXP 18
2843: PUSH
2844: EMPTY
2845: LIST
2846: LIST
2847: PUSH
2848: LD_INT 30
2850: PUSH
2851: LD_INT 32
2853: PUSH
2854: EMPTY
2855: LIST
2856: LIST
2857: PUSH
2858: EMPTY
2859: LIST
2860: LIST
2861: PPUSH
2862: CALL_OW 69
2866: ST_TO_ADDR
// for i = 1 to b_list do
2867: LD_ADDR_VAR 0 2
2871: PUSH
2872: DOUBLE
2873: LD_INT 1
2875: DEC
2876: ST_TO_ADDR
2877: LD_VAR 0 4
2881: PUSH
2882: FOR_TO
2883: IFFALSE 2913
// ComEnterUnit ( us_sol [ i ] , b_list [ i ] ) ;
2885: LD_EXP 21
2889: PUSH
2890: LD_VAR 0 2
2894: ARRAY
2895: PPUSH
2896: LD_VAR 0 4
2900: PUSH
2901: LD_VAR 0 2
2905: ARRAY
2906: PPUSH
2907: CALL_OW 120
2911: GO 2882
2913: POP
2914: POP
// us_all_units := FilterAllUnits ( [ [ f_side , americans ] , [ f_type , unit_human ] ] ) ;
2915: LD_ADDR_EXP 24
2919: PUSH
2920: LD_INT 22
2922: PUSH
2923: LD_EXP 18
2927: PUSH
2928: EMPTY
2929: LIST
2930: LIST
2931: PUSH
2932: LD_INT 21
2934: PUSH
2935: LD_INT 1
2937: PUSH
2938: EMPTY
2939: LIST
2940: LIST
2941: PUSH
2942: EMPTY
2943: LIST
2944: LIST
2945: PPUSH
2946: CALL_OW 69
2950: ST_TO_ADDR
// end ;
2951: LD_VAR 0 1
2955: RET
// export function prepare_us_side ; begin
2956: LD_INT 0
2958: PPUSH
// prepare_us_base ;
2959: CALL 2497 0 0
// prepare_us_patrol ;
2963: CALL 2234 0 0
// end ;
2967: LD_VAR 0 1
2971: RET
// every 0 0$1 trigger IsInArea ( truck1 , half_line ) or IsInArea ( truck2 , half_line ) do
2972: LD_EXP 7
2976: PPUSH
2977: LD_INT 5
2979: PPUSH
2980: CALL_OW 308
2984: PUSH
2985: LD_EXP 8
2989: PPUSH
2990: LD_INT 5
2992: PPUSH
2993: CALL_OW 308
2997: OR
2998: IFFALSE 3006
3000: GO 3002
3002: DISABLE
// begin enable ( 1 ) ;
3003: LD_INT 1
3005: ENABLE_MARKED
// end ;
3006: END
// every 0 0$1 trigger FilterUnitsInArea ( us_hunt , [ [ f_side , you ] ] ) marked 1 do var list ;
3007: LD_INT 3
3009: PPUSH
3010: LD_INT 22
3012: PUSH
3013: LD_EXP 17
3017: PUSH
3018: EMPTY
3019: LIST
3020: LIST
3021: PUSH
3022: EMPTY
3023: LIST
3024: PPUSH
3025: CALL_OW 70
3029: IFFALSE 3124
3031: GO 3033
3033: DISABLE
3034: LD_INT 0
3036: PPUSH
// begin list := FilterUnitsInArea ( us_hunt , [ [ f_side , you ] ] ) ;
3037: LD_ADDR_VAR 0 1
3041: PUSH
3042: LD_INT 3
3044: PPUSH
3045: LD_INT 22
3047: PUSH
3048: LD_EXP 17
3052: PUSH
3053: EMPTY
3054: LIST
3055: LIST
3056: PUSH
3057: EMPTY
3058: LIST
3059: PPUSH
3060: CALL_OW 70
3064: ST_TO_ADDR
// repeat wait ( 0 0$1 ) ;
3065: LD_INT 35
3067: PPUSH
3068: CALL_OW 67
// until not FilterUnitsInArea ( us_hunt , [ [ f_side , you ] ] ) ;
3072: LD_INT 3
3074: PPUSH
3075: LD_INT 22
3077: PUSH
3078: LD_EXP 17
3082: PUSH
3083: EMPTY
3084: LIST
3085: LIST
3086: PUSH
3087: EMPTY
3088: LIST
3089: PPUSH
3090: CALL_OW 70
3094: NOT
3095: IFFALSE 3065
// if list then
3097: LD_VAR 0 1
3101: IFFALSE 3116
// American_Hunt ( list [ 1 ] ) ;
3103: LD_VAR 0 1
3107: PUSH
3108: LD_INT 1
3110: ARRAY
3111: PPUSH
3112: CALL 3127 0 1
// if not query_started then
3116: LD_EXP 29
3120: NOT
3121: IFFALSE 3124
// enable ;
3123: ENABLE
// end ;
3124: PPOPN 1
3126: END
// function American_Hunt ( un ) ; var i , b_list ; begin
3127: LD_INT 0
3129: PPUSH
3130: PPUSH
3131: PPUSH
// ComExitBuilding ( us_sol ) ;
3132: LD_EXP 21
3136: PPUSH
3137: CALL_OW 122
// Wait ( 0 0$0.5 ) ;
3141: LD_INT 18
3143: PPUSH
3144: CALL_OW 67
// repeat ComAgressiveMove ( us_sol , GetX ( un ) , GetY ( un ) ) ;
3148: LD_EXP 21
3152: PPUSH
3153: LD_VAR 0 1
3157: PPUSH
3158: CALL_OW 250
3162: PPUSH
3163: LD_VAR 0 1
3167: PPUSH
3168: CALL_OW 251
3172: PPUSH
3173: CALL_OW 114
// wait ( 0 0$1 ) ;
3177: LD_INT 35
3179: PPUSH
3180: CALL_OW 67
// until not See ( americans , un ) or query_started ;
3184: LD_EXP 18
3188: PPUSH
3189: LD_VAR 0 1
3193: PPUSH
3194: CALL_OW 292
3198: NOT
3199: PUSH
3200: LD_EXP 29
3204: OR
3205: IFFALSE 3148
// b_list := FilterAllUnits ( [ [ f_side , americans ] , [ f_btype , b_bunker ] ] ) ;
3207: LD_ADDR_VAR 0 4
3211: PUSH
3212: LD_INT 22
3214: PUSH
3215: LD_EXP 18
3219: PUSH
3220: EMPTY
3221: LIST
3222: LIST
3223: PUSH
3224: LD_INT 30
3226: PUSH
3227: LD_INT 32
3229: PUSH
3230: EMPTY
3231: LIST
3232: LIST
3233: PUSH
3234: EMPTY
3235: LIST
3236: LIST
3237: PPUSH
3238: CALL_OW 69
3242: ST_TO_ADDR
// for i = 1 to us_sol do
3243: LD_ADDR_VAR 0 3
3247: PUSH
3248: DOUBLE
3249: LD_INT 1
3251: DEC
3252: ST_TO_ADDR
3253: LD_EXP 21
3257: PUSH
3258: FOR_TO
3259: IFFALSE 3325
// if i <= ( 0 + b_list ) then
3261: LD_VAR 0 3
3265: PUSH
3266: LD_INT 0
3268: PUSH
3269: LD_VAR 0 4
3273: PLUS
3274: LESSEQUAL
3275: IFFALSE 3305
// ComEnterUnit ( us_sol [ i ] , b_list [ i ] ) else
3277: LD_EXP 21
3281: PUSH
3282: LD_VAR 0 3
3286: ARRAY
3287: PPUSH
3288: LD_VAR 0 4
3292: PUSH
3293: LD_VAR 0 3
3297: ARRAY
3298: PPUSH
3299: CALL_OW 120
3303: GO 3323
// ComMoveToArea ( us_sol [ i ] , parking ) ;
3305: LD_EXP 21
3309: PUSH
3310: LD_VAR 0 3
3314: ARRAY
3315: PPUSH
3316: LD_INT 9
3318: PPUSH
3319: CALL_OW 113
3323: GO 3258
3325: POP
3326: POP
// wait ( 0 0$5 ) ;
3327: LD_INT 175
3329: PPUSH
3330: CALL_OW 67
// end ;
3334: LD_VAR 0 2
3338: RET
// every 0 0$5 marked 7 do var difficulty_time ;
3339: GO 3341
3341: DISABLE
3342: LD_INT 0
3344: PPUSH
// begin difficulty_time := [ 25 25$0 , 15 15$0 , 10 10$0 ] [ difficulty ] ;
3345: LD_ADDR_VAR 0 1
3349: PUSH
3350: LD_INT 52500
3352: PUSH
3353: LD_INT 31500
3355: PUSH
3356: LD_INT 21000
3358: PUSH
3359: EMPTY
3360: LIST
3361: LIST
3362: LIST
3363: PUSH
3364: LD_OWVAR 67
3368: ARRAY
3369: ST_TO_ADDR
// Wait ( difficulty_time ) ;
3370: LD_VAR 0 1
3374: PPUSH
3375: CALL_OW 67
// americans_leaving ;
3379: CALL 3394 0 0
// end ;
3383: PPOPN 1
3385: END
// every 0 0$1 marked 10 do
3386: GO 3388
3388: DISABLE
// begin americans_leaving ;
3389: CALL 3394 0 0
// end ;
3393: END
// function americans_leaving ; var un , list , i , max , vehicles ; begin
3394: LD_INT 0
3396: PPUSH
3397: PPUSH
3398: PPUSH
3399: PPUSH
3400: PPUSH
3401: PPUSH
// keep_base_finished := true ;
3402: LD_ADDR_EXP 16
3406: PUSH
3407: LD_INT 1
3409: ST_TO_ADDR
// ComExitBuilding ( us_sol ) ;
3410: LD_EXP 21
3414: PPUSH
3415: CALL_OW 122
// ComExitBuilding ( us_sci ) ;
3419: LD_EXP 22
3423: PPUSH
3424: CALL_OW 122
// wait ( 0 0$1 ) ;
3428: LD_INT 35
3430: PPUSH
3431: CALL_OW 67
// list := FilterAllUnits ( [ [ f_side , americans ] , [ f_type , unit_human ] ] ) ;
3435: LD_ADDR_VAR 0 3
3439: PUSH
3440: LD_INT 22
3442: PUSH
3443: LD_EXP 18
3447: PUSH
3448: EMPTY
3449: LIST
3450: LIST
3451: PUSH
3452: LD_INT 21
3454: PUSH
3455: LD_INT 1
3457: PUSH
3458: EMPTY
3459: LIST
3460: LIST
3461: PUSH
3462: EMPTY
3463: LIST
3464: LIST
3465: PPUSH
3466: CALL_OW 69
3470: ST_TO_ADDR
// ComMoveToArea ( list , leave_area ) ;
3471: LD_VAR 0 3
3475: PPUSH
3476: LD_INT 7
3478: PPUSH
3479: CALL_OW 113
// vehicles := FilterUnitsInArea ( us_base , [ [ f_side , americans ] , [ f_type , unit_vehicle ] , [ f_not , [ f_occupied ] ] ] ) ;
3483: LD_ADDR_VAR 0 6
3487: PUSH
3488: LD_INT 1
3490: PPUSH
3491: LD_INT 22
3493: PUSH
3494: LD_EXP 18
3498: PUSH
3499: EMPTY
3500: LIST
3501: LIST
3502: PUSH
3503: LD_INT 21
3505: PUSH
3506: LD_INT 2
3508: PUSH
3509: EMPTY
3510: LIST
3511: LIST
3512: PUSH
3513: LD_INT 3
3515: PUSH
3516: LD_INT 59
3518: PUSH
3519: EMPTY
3520: LIST
3521: PUSH
3522: EMPTY
3523: LIST
3524: LIST
3525: PUSH
3526: EMPTY
3527: LIST
3528: LIST
3529: LIST
3530: PPUSH
3531: CALL_OW 70
3535: ST_TO_ADDR
// if ( 0 + vehicles ) < list then
3536: LD_INT 0
3538: PUSH
3539: LD_VAR 0 6
3543: PLUS
3544: PUSH
3545: LD_VAR 0 3
3549: LESS
3550: IFFALSE 3568
// max := 0 + vehicles else
3552: LD_ADDR_VAR 0 5
3556: PUSH
3557: LD_INT 0
3559: PUSH
3560: LD_VAR 0 6
3564: PLUS
3565: ST_TO_ADDR
3566: GO 3582
// max := 0 + list ;
3568: LD_ADDR_VAR 0 5
3572: PUSH
3573: LD_INT 0
3575: PUSH
3576: LD_VAR 0 3
3580: PLUS
3581: ST_TO_ADDR
// if vehicles and list then
3582: LD_VAR 0 6
3586: PUSH
3587: LD_VAR 0 3
3591: AND
3592: IFFALSE 3660
// for i = 1 to max do
3594: LD_ADDR_VAR 0 4
3598: PUSH
3599: DOUBLE
3600: LD_INT 1
3602: DEC
3603: ST_TO_ADDR
3604: LD_VAR 0 5
3608: PUSH
3609: FOR_TO
3610: IFFALSE 3658
// begin ComEnterUnit ( list [ i ] , vehicles [ i ] ) ;
3612: LD_VAR 0 3
3616: PUSH
3617: LD_VAR 0 4
3621: ARRAY
3622: PPUSH
3623: LD_VAR 0 6
3627: PUSH
3628: LD_VAR 0 4
3632: ARRAY
3633: PPUSH
3634: CALL_OW 120
// AddComMoveToArea ( list [ i ] , leave_area ) ;
3638: LD_VAR 0 3
3642: PUSH
3643: LD_VAR 0 4
3647: ARRAY
3648: PPUSH
3649: LD_INT 7
3651: PPUSH
3652: CALL_OW 173
// end ;
3656: GO 3609
3658: POP
3659: POP
// time_out := true ;
3660: LD_ADDR_EXP 11
3664: PUSH
3665: LD_INT 1
3667: ST_TO_ADDR
// enable ( 9 ) ;
3668: LD_INT 9
3670: ENABLE_MARKED
// repeat wait ( 0 0$0.5 ) ;
3671: LD_INT 18
3673: PPUSH
3674: CALL_OW 67
// list := FilterAllUnits ( [ [ f_side , americans ] , [ f_type , unit_human ] , [ f_placed ] , [ f_ok ] ] ) ;
3678: LD_ADDR_VAR 0 3
3682: PUSH
3683: LD_INT 22
3685: PUSH
3686: LD_EXP 18
3690: PUSH
3691: EMPTY
3692: LIST
3693: LIST
3694: PUSH
3695: LD_INT 21
3697: PUSH
3698: LD_INT 1
3700: PUSH
3701: EMPTY
3702: LIST
3703: LIST
3704: PUSH
3705: LD_INT 52
3707: PUSH
3708: EMPTY
3709: LIST
3710: PUSH
3711: LD_INT 50
3713: PUSH
3714: EMPTY
3715: LIST
3716: PUSH
3717: EMPTY
3718: LIST
3719: LIST
3720: LIST
3721: LIST
3722: PPUSH
3723: CALL_OW 69
3727: ST_TO_ADDR
// for un in list do
3728: LD_ADDR_VAR 0 2
3732: PUSH
3733: LD_VAR 0 3
3737: PUSH
3738: FOR_IN
3739: IFFALSE 3767
// if not HasTask ( un ) then
3741: LD_VAR 0 2
3745: PPUSH
3746: CALL_OW 314
3750: NOT
3751: IFFALSE 3765
// ComMoveToArea ( un , leave_area ) ;
3753: LD_VAR 0 2
3757: PPUSH
3758: LD_INT 7
3760: PPUSH
3761: CALL_OW 113
3765: GO 3738
3767: POP
3768: POP
// until not list ;
3769: LD_VAR 0 3
3773: NOT
3774: IFFALSE 3671
// if not query_started then
3776: LD_EXP 29
3780: NOT
3781: IFFALSE 3790
// Mission_Failed ( 3 ) ;
3783: LD_INT 3
3785: PPUSH
3786: CALL 1361 0 1
// end ;
3790: LD_VAR 0 1
3794: RET
// every 0 0$1 trigger FilterUnitsInArea ( leave_area , [ [ f_side , americans ] ] ) marked 9 do var list , un , max ;
3795: LD_INT 7
3797: PPUSH
3798: LD_INT 22
3800: PUSH
3801: LD_EXP 18
3805: PUSH
3806: EMPTY
3807: LIST
3808: LIST
3809: PUSH
3810: EMPTY
3811: LIST
3812: PPUSH
3813: CALL_OW 70
3817: IFFALSE 3940
3819: GO 3821
3821: DISABLE
3822: LD_INT 0
3824: PPUSH
3825: PPUSH
3826: PPUSH
// begin list := FilterUnitsInArea ( leave_area , [ [ f_side , americans ] ] ) ;
3827: LD_ADDR_VAR 0 1
3831: PUSH
3832: LD_INT 7
3834: PPUSH
3835: LD_INT 22
3837: PUSH
3838: LD_EXP 18
3842: PUSH
3843: EMPTY
3844: LIST
3845: LIST
3846: PUSH
3847: EMPTY
3848: LIST
3849: PPUSH
3850: CALL_OW 70
3854: ST_TO_ADDR
// for un in list do
3855: LD_ADDR_VAR 0 2
3859: PUSH
3860: LD_VAR 0 1
3864: PUSH
3865: FOR_IN
3866: IFFALSE 3937
// begin if un in us_sci then
3868: LD_VAR 0 2
3872: PUSH
3873: LD_EXP 22
3877: IN
3878: IFFALSE 3896
// us_sci := us_sci diff un ;
3880: LD_ADDR_EXP 22
3884: PUSH
3885: LD_EXP 22
3889: PUSH
3890: LD_VAR 0 2
3894: DIFF
3895: ST_TO_ADDR
// max := IsInUnit ( un ) ;
3896: LD_ADDR_VAR 0 3
3900: PUSH
3901: LD_VAR 0 2
3905: PPUSH
3906: CALL_OW 310
3910: ST_TO_ADDR
// RemoveUnit ( un ) ;
3911: LD_VAR 0 2
3915: PPUSH
3916: CALL_OW 64
// if max then
3920: LD_VAR 0 3
3924: IFFALSE 3935
// RemoveUnit ( max ) ;
3926: LD_VAR 0 3
3930: PPUSH
3931: CALL_OW 64
// end ;
3935: GO 3865
3937: POP
3938: POP
// enable ;
3939: ENABLE
// end ; end_of_file
3940: PPOPN 3
3942: END
// on UnitDestroyed ( un ) do begin if GetSide ( un ) = americans then
3943: LD_VAR 0 1
3947: PPUSH
3948: CALL_OW 255
3952: PUSH
3953: LD_EXP 18
3957: EQUAL
3958: IFFALSE 4051
// begin us_patrol_1 := us_patrol_1 diff un ;
3960: LD_ADDR_EXP 25
3964: PUSH
3965: LD_EXP 25
3969: PUSH
3970: LD_VAR 0 1
3974: DIFF
3975: ST_TO_ADDR
// us_patrol_2 := us_patrol_2 diff un ;
3976: LD_ADDR_EXP 26
3980: PUSH
3981: LD_EXP 26
3985: PUSH
3986: LD_VAR 0 1
3990: DIFF
3991: ST_TO_ADDR
// us_sci := us_sci diff un ;
3992: LD_ADDR_EXP 22
3996: PUSH
3997: LD_EXP 22
4001: PUSH
4002: LD_VAR 0 1
4006: DIFF
4007: ST_TO_ADDR
// us_sol := us_sol diff un ;
4008: LD_ADDR_EXP 21
4012: PUSH
4013: LD_EXP 21
4017: PUSH
4018: LD_VAR 0 1
4022: DIFF
4023: ST_TO_ADDR
// if ( not us_sci ) and lab_destroyed and ( not technology_taken ) then
4024: LD_EXP 22
4028: NOT
4029: PUSH
4030: LD_EXP 10
4034: AND
4035: PUSH
4036: LD_EXP 15
4040: NOT
4041: AND
4042: IFFALSE 4051
// Mission_Failed ( 5 ) ;
4044: LD_INT 5
4046: PPUSH
4047: CALL 1361 0 1
// end ; if un = Burlak then
4051: LD_VAR 0 1
4055: PUSH
4056: LD_EXP 2
4060: EQUAL
4061: IFFALSE 4070
// Mission_Failed ( 1 ) ;
4063: LD_INT 1
4065: PPUSH
4066: CALL 1361 0 1
// if un = MacMillan then
4070: LD_VAR 0 1
4074: PUSH
4075: LD_EXP 1
4079: EQUAL
4080: IFFALSE 4089
// Mission_Failed ( 2 ) ;
4082: LD_INT 2
4084: PPUSH
4085: CALL 1361 0 1
// if ( un = us_lab ) then
4089: LD_VAR 0 1
4093: PUSH
4094: LD_INT 1
4096: EQUAL
4097: IFFALSE 4138
// begin lab_destroyed := true ;
4099: LD_ADDR_EXP 10
4103: PUSH
4104: LD_INT 1
4106: ST_TO_ADDR
// if not ( us_sci or technology_taken ) then
4107: LD_EXP 22
4111: PUSH
4112: LD_EXP 15
4116: OR
4117: NOT
4118: IFFALSE 4127
// Mission_Failed ( 5 ) ;
4120: LD_INT 5
4122: PPUSH
4123: CALL 1361 0 1
// if not query_started then
4127: LD_EXP 29
4131: NOT
4132: IFFALSE 4138
// query_kill ;
4134: CALL 6010 0 0
// end ; if ( GetSide ( un ) = you ) and ( GetType ( un ) = unit_vehicle ) and ( GetWeapon ( un ) in [ us_cargo_bay , ru_cargo_bay ] ) then
4138: LD_VAR 0 1
4142: PPUSH
4143: CALL_OW 255
4147: PUSH
4148: LD_EXP 17
4152: EQUAL
4153: PUSH
4154: LD_VAR 0 1
4158: PPUSH
4159: CALL_OW 247
4163: PUSH
4164: LD_INT 2
4166: EQUAL
4167: AND
4168: PUSH
4169: LD_VAR 0 1
4173: PPUSH
4174: CALL_OW 264
4178: PUSH
4179: LD_INT 12
4181: PUSH
4182: LD_INT 51
4184: PUSH
4185: EMPTY
4186: LIST
4187: LIST
4188: IN
4189: AND
4190: IFFALSE 4199
// Mission_Failed ( 6 ) ;
4192: LD_INT 6
4194: PPUSH
4195: CALL 1361 0 1
// end ;
4199: PPOPN 1
4201: END
// on UnitGoesToRed ( un ) do begin if un in [ Burlak , MacMillan ] and not FilterAllUnits ( [ [ f_side , you ] , [ f_type , unit_building ] , [ f_btype , b_lab ] ] ) then
4202: LD_VAR 0 1
4206: PUSH
4207: LD_EXP 2
4211: PUSH
4212: LD_EXP 1
4216: PUSH
4217: EMPTY
4218: LIST
4219: LIST
4220: IN
4221: PUSH
4222: LD_INT 22
4224: PUSH
4225: LD_EXP 17
4229: PUSH
4230: EMPTY
4231: LIST
4232: LIST
4233: PUSH
4234: LD_INT 21
4236: PUSH
4237: LD_INT 3
4239: PUSH
4240: EMPTY
4241: LIST
4242: LIST
4243: PUSH
4244: LD_INT 30
4246: PUSH
4247: LD_INT 6
4249: PUSH
4250: EMPTY
4251: LIST
4252: LIST
4253: PUSH
4254: EMPTY
4255: LIST
4256: LIST
4257: LIST
4258: PPUSH
4259: CALL_OW 69
4263: NOT
4264: AND
4265: IFFALSE 4305
// begin if un = Burlak then
4267: LD_VAR 0 1
4271: PUSH
4272: LD_EXP 2
4276: EQUAL
4277: IFFALSE 4286
// Mission_Failed ( 1 ) ;
4279: LD_INT 1
4281: PPUSH
4282: CALL 1361 0 1
// if un = MacMillan then
4286: LD_VAR 0 1
4290: PUSH
4291: LD_EXP 1
4295: EQUAL
4296: IFFALSE 4305
// Mission_Failed ( 2 ) ;
4298: LD_INT 2
4300: PPUSH
4301: CALL 1361 0 1
// end ; if ( un = us_lab ) and ( not query_started ) then
4305: LD_VAR 0 1
4309: PUSH
4310: LD_INT 1
4312: EQUAL
4313: PUSH
4314: LD_EXP 29
4318: NOT
4319: AND
4320: IFFALSE 4326
// query_kill ;
4322: CALL 6010 0 0
// end ;
4326: PPOPN 1
4328: END
// on BuildingCaptured ( building , orig_side , engeneer ) do begin if ( building = us_depot ) and ( not query_started ) and ( not time_out ) then
4329: LD_VAR 0 1
4333: PUSH
4334: LD_INT 5
4336: EQUAL
4337: PUSH
4338: LD_EXP 29
4342: NOT
4343: AND
4344: PUSH
4345: LD_EXP 11
4349: NOT
4350: AND
4351: IFFALSE 4357
// query_kill ;
4353: CALL 6010 0 0
// if ( building = us_lab ) then
4357: LD_VAR 0 1
4361: PUSH
4362: LD_INT 1
4364: EQUAL
4365: IFFALSE 4379
// begin technology_taken := true ;
4367: LD_ADDR_EXP 15
4371: PUSH
4372: LD_INT 1
4374: ST_TO_ADDR
// konecny_rozhovor ;
4375: CALL 6989 0 0
// end ; end ;
4379: PPOPN 3
4381: END
// on ArtifactLoaded ( un , size ) do begin if not art_picked then
4382: LD_EXP 31
4386: NOT
4387: IFFALSE 4401
// begin art_picked := true ;
4389: LD_ADDR_EXP 31
4393: PUSH
4394: LD_INT 1
4396: ST_TO_ADDR
// Artefact_Picked ;
4397: CALL 5094 0 0
// end ; art_cargo := un ;
4401: LD_ADDR_EXP 32
4405: PUSH
4406: LD_VAR 0 1
4410: ST_TO_ADDR
// end ;
4411: PPOPN 2
4413: END
// on ArtifactUnloaded ( un , size ) do begin art_cargo := false ;
4414: LD_ADDR_EXP 32
4418: PUSH
4419: LD_INT 0
4421: ST_TO_ADDR
// end ; end_of_file
4422: PPOPN 2
4424: END
// every 0 0$2 do var un , animal_out ;
4425: GO 4427
4427: DISABLE
4428: LD_INT 0
4430: PPUSH
4431: PPUSH
// begin animal_out := FilterAllUnits ( [ [ f_nation , nation_nature ] ] ) ;
4432: LD_ADDR_VAR 0 2
4436: PUSH
4437: LD_INT 23
4439: PUSH
4440: LD_INT 0
4442: PUSH
4443: EMPTY
4444: LIST
4445: LIST
4446: PUSH
4447: EMPTY
4448: LIST
4449: PPUSH
4450: CALL_OW 69
4454: ST_TO_ADDR
// ComMoveToArea ( animal_out , nature ) ;
4455: LD_VAR 0 2
4459: PPUSH
4460: LD_INT 2
4462: PPUSH
4463: CALL_OW 113
// enable ;
4467: ENABLE
// end ; end_of_file
4468: PPOPN 2
4470: END
// export blast_done , query_started , contamine , art_picked , art_cargo ; export dokecano ; export function starting_scene ; begin
4471: LD_INT 0
4473: PPUSH
// RevealFogArea ( you , artefact_fog ) ;
4474: LD_EXP 17
4478: PPUSH
4479: LD_INT 4
4481: PPUSH
4482: CALL_OW 332
// CenterNowOnUnits ( [ truck1 , truck2 ] ) ;
4486: LD_EXP 7
4490: PUSH
4491: LD_EXP 8
4495: PUSH
4496: EMPTY
4497: LIST
4498: LIST
4499: PPUSH
4500: CALL_OW 87
// IngameOn ;
4504: CALL_OW 8
// ComMoveXY ( MacMillan , 192 , 82 ) ;
4508: LD_EXP 1
4512: PPUSH
4513: LD_INT 192
4515: PPUSH
4516: LD_INT 82
4518: PPUSH
4519: CALL_OW 111
// ComMoveXY ( Burlak , 193 , 86 ) ;
4523: LD_EXP 2
4527: PPUSH
4528: LD_INT 193
4530: PPUSH
4531: LD_INT 86
4533: PPUSH
4534: CALL_OW 111
// AddComExitVehicle ( [ MacMillan , Burlak ] ) ;
4538: LD_EXP 1
4542: PUSH
4543: LD_EXP 2
4547: PUSH
4548: EMPTY
4549: LIST
4550: LIST
4551: PPUSH
4552: CALL_OW 181
// wait ( 0 0$5 ) ;
4556: LD_INT 175
4558: PPUSH
4559: CALL_OW 67
// IngameOff ;
4563: CALL_OW 9
// DialogueOn ;
4567: CALL_OW 6
// interface_hidden := true ;
4571: LD_ADDR_OWVAR 54
4575: PUSH
4576: LD_INT 1
4578: ST_TO_ADDR
// Say ( Burlak , D2-Bur-1 ) ;
4579: LD_EXP 2
4583: PPUSH
4584: LD_STRING D2-Bur-1
4586: PPUSH
4587: CALL_OW 88
// Say ( MacMillan , D2-JMM-1 ) ;
4591: LD_EXP 1
4595: PPUSH
4596: LD_STRING D2-JMM-1
4598: PPUSH
4599: CALL_OW 88
// Say ( Burlak , D2-Bur-2 ) ;
4603: LD_EXP 2
4607: PPUSH
4608: LD_STRING D2-Bur-2
4610: PPUSH
4611: CALL_OW 88
// SaveForQuickRestart ;
4615: CALL_OW 22
// wait ( 10 ) ;
4619: LD_INT 10
4621: PPUSH
4622: CALL_OW 67
// ChangeMissionObjectives ( MArtPickup ) ;
4626: LD_STRING MArtPickup
4628: PPUSH
4629: CALL_OW 337
// interface_hidden := false ;
4633: LD_ADDR_OWVAR 54
4637: PUSH
4638: LD_INT 0
4640: ST_TO_ADDR
// DialogueOff ;
4641: CALL_OW 7
// ComFree ( [ MacMillan , Burlak ] ) ;
4645: LD_EXP 1
4649: PUSH
4650: LD_EXP 2
4654: PUSH
4655: EMPTY
4656: LIST
4657: LIST
4658: PPUSH
4659: CALL_OW 139
// end ;
4663: LD_VAR 0 1
4667: RET
// every 0 0$1 trigger FilterAllUnits ( [ [ f_see , you ] , [ f_side , americans ] , [ f_type , unit_human ] ] ) do
4668: LD_INT 101
4670: PUSH
4671: LD_EXP 17
4675: PUSH
4676: EMPTY
4677: LIST
4678: LIST
4679: PUSH
4680: LD_INT 22
4682: PUSH
4683: LD_EXP 18
4687: PUSH
4688: EMPTY
4689: LIST
4690: LIST
4691: PUSH
4692: LD_INT 21
4694: PUSH
4695: LD_INT 1
4697: PUSH
4698: EMPTY
4699: LIST
4700: LIST
4701: PUSH
4702: EMPTY
4703: LIST
4704: LIST
4705: LIST
4706: PPUSH
4707: CALL_OW 69
4711: IFFALSE 4815
4713: GO 4715
4715: DISABLE
// begin if blast_done then
4716: LD_EXP 28
4720: IFFALSE 4724
// exit ;
4722: GO 4815
// repeat wait ( 0 0$1 ) ;
4724: LD_INT 35
4726: PPUSH
4727: CALL_OW 67
// until not FilterAllUnits ( [ [ f_see , you ] , [ f_side , americans ] , [ f_type , unit_human ] , [ f_ok ] ] ) ;
4731: LD_INT 101
4733: PUSH
4734: LD_EXP 17
4738: PUSH
4739: EMPTY
4740: LIST
4741: LIST
4742: PUSH
4743: LD_INT 22
4745: PUSH
4746: LD_EXP 18
4750: PUSH
4751: EMPTY
4752: LIST
4753: LIST
4754: PUSH
4755: LD_INT 21
4757: PUSH
4758: LD_INT 1
4760: PUSH
4761: EMPTY
4762: LIST
4763: LIST
4764: PUSH
4765: LD_INT 50
4767: PUSH
4768: EMPTY
4769: LIST
4770: PUSH
4771: EMPTY
4772: LIST
4773: LIST
4774: LIST
4775: LIST
4776: PPUSH
4777: CALL_OW 69
4781: NOT
4782: IFFALSE 4724
// wait ( 0 0$2 ) ;
4784: LD_INT 70
4786: PPUSH
4787: CALL_OW 67
// Say ( Burlak , D3-Bur-1 ) ;
4791: LD_EXP 2
4795: PPUSH
4796: LD_STRING D3-Bur-1
4798: PPUSH
4799: CALL_OW 88
// Say ( MacMillan , D3-JMM-1 ) ;
4803: LD_EXP 1
4807: PPUSH
4808: LD_STRING D3-JMM-1
4810: PPUSH
4811: CALL_OW 88
// end ;
4815: END
// every 0 0$1 trigger FilterAllUnits ( [ [ f_see , you ] , [ f_type , unit_building ] ] ) do
4816: LD_INT 101
4818: PUSH
4819: LD_EXP 17
4823: PUSH
4824: EMPTY
4825: LIST
4826: LIST
4827: PUSH
4828: LD_INT 21
4830: PUSH
4831: LD_INT 3
4833: PUSH
4834: EMPTY
4835: LIST
4836: LIST
4837: PUSH
4838: EMPTY
4839: LIST
4840: LIST
4841: PPUSH
4842: CALL_OW 69
4846: IFFALSE 5093
4848: GO 4850
4850: DISABLE
// begin wait ( 0 0$2 ) ;
4851: LD_INT 70
4853: PPUSH
4854: CALL_OW 67
// DialogueOn ;
4858: CALL_OW 6
// interface_hidden := true ;
4862: LD_ADDR_OWVAR 54
4866: PUSH
4867: LD_INT 1
4869: ST_TO_ADDR
// Say ( MacMillan , D3a-JMM-1 ) ;
4870: LD_EXP 1
4874: PPUSH
4875: LD_STRING D3a-JMM-1
4877: PPUSH
4878: CALL_OW 88
// Say ( Burlak , D3a-Bur-1 ) ;
4882: LD_EXP 2
4886: PPUSH
4887: LD_STRING D3a-Bur-1
4889: PPUSH
4890: CALL_OW 88
// Say ( MacMillan , D3a-JMM-2 ) ;
4894: LD_EXP 1
4898: PPUSH
4899: LD_STRING D3a-JMM-2
4901: PPUSH
4902: CALL_OW 88
// if Joan then
4906: LD_EXP 3
4910: IFFALSE 4926
// SayRadio ( Joan , D3a-Joan-2 ) else
4912: LD_EXP 3
4916: PPUSH
4917: LD_STRING D3a-Joan-2
4919: PPUSH
4920: CALL_OW 94
4924: GO 4938
// SayRadio ( ru_sci , D3a-RSci1-2 ) ;
4926: LD_EXP 4
4930: PPUSH
4931: LD_STRING D3a-RSci1-2
4933: PPUSH
4934: CALL_OW 94
// SayRadio ( Stevens , D3a-Huck-2 ) ;
4938: LD_EXP 6
4942: PPUSH
4943: LD_STRING D3a-Huck-2
4945: PPUSH
4946: CALL_OW 94
// SayRadio ( Powell , D3a-Pow-2 ) ;
4950: LD_EXP 5
4954: PPUSH
4955: LD_STRING D3a-Pow-2
4957: PPUSH
4958: CALL_OW 94
// SayRadio ( Stevens , D3a-Huck-3 ) ;
4962: LD_EXP 6
4966: PPUSH
4967: LD_STRING D3a-Huck-3
4969: PPUSH
4970: CALL_OW 94
// SayRadio ( Powell , D3a-Pow-3 ) ;
4974: LD_EXP 5
4978: PPUSH
4979: LD_STRING D3a-Pow-3
4981: PPUSH
4982: CALL_OW 94
// SayRadio ( Stevens , D3a-Huck-4 ) ;
4986: LD_EXP 6
4990: PPUSH
4991: LD_STRING D3a-Huck-4
4993: PPUSH
4994: CALL_OW 94
// Say ( MacMillan , D3a-JMM-4 ) ;
4998: LD_EXP 1
5002: PPUSH
5003: LD_STRING D3a-JMM-4
5005: PPUSH
5006: CALL_OW 88
// Say ( Burlak , D3a-Bur-4 ) ;
5010: LD_EXP 2
5014: PPUSH
5015: LD_STRING D3a-Bur-4
5017: PPUSH
5018: CALL_OW 88
// if Joan then
5022: LD_EXP 3
5026: IFFALSE 5042
// SayRadio ( Joan , D3a-Joan-4 ) else
5028: LD_EXP 3
5032: PPUSH
5033: LD_STRING D3a-Joan-4
5035: PPUSH
5036: CALL_OW 94
5040: GO 5054
// SayRadio ( ru_sci , D3a-RSci1-4 ) ;
5042: LD_EXP 4
5046: PPUSH
5047: LD_STRING D3a-RSci1-4
5049: PPUSH
5050: CALL_OW 94
// Say ( MacMillan , D3a-JMM-5 ) ;
5054: LD_EXP 1
5058: PPUSH
5059: LD_STRING D3a-JMM-5
5061: PPUSH
5062: CALL_OW 88
// Say ( Burlak , D3a-Bur-5 ) ;
5066: LD_EXP 2
5070: PPUSH
5071: LD_STRING D3a-Bur-5
5073: PPUSH
5074: CALL_OW 88
// interface_hidden := false ;
5078: LD_ADDR_OWVAR 54
5082: PUSH
5083: LD_INT 0
5085: ST_TO_ADDR
// DialogueOff ;
5086: CALL_OW 7
// enable ( 4 ) ;
5090: LD_INT 4
5092: ENABLE_MARKED
// end ;
5093: END
// export function Artefact_Picked ; begin
5094: LD_INT 0
5096: PPUSH
// wait ( 5 ) ;
5097: LD_INT 5
5099: PPUSH
5100: CALL_OW 67
// DialogueOn ;
5104: CALL_OW 6
// interface_hidden := true ;
5108: LD_ADDR_OWVAR 54
5112: PUSH
5113: LD_INT 1
5115: ST_TO_ADDR
// Say ( MacMillan , D4-JMM-1 ) ;
5116: LD_EXP 1
5120: PPUSH
5121: LD_STRING D4-JMM-1
5123: PPUSH
5124: CALL_OW 88
// Say ( Burlak , D4-Bur-1 ) ;
5128: LD_EXP 2
5132: PPUSH
5133: LD_STRING D4-Bur-1
5135: PPUSH
5136: CALL_OW 88
// ChangeMissionObjectives ( MReturn ) ;
5140: LD_STRING MReturn
5142: PPUSH
5143: CALL_OW 337
// interface_hidden := false ;
5147: LD_ADDR_OWVAR 54
5151: PUSH
5152: LD_INT 0
5154: ST_TO_ADDR
// DialogueOff ;
5155: CALL_OW 7
// end ;
5159: LD_VAR 0 1
5163: RET
// every 0 0$1 marked 4 do var blast_time ;
5164: GO 5166
5166: DISABLE
5167: LD_INT 0
5169: PPUSH
// begin blast_countdown := true ;
5170: LD_ADDR_EXP 27
5174: PUSH
5175: LD_INT 1
5177: ST_TO_ADDR
// blast_time := TICK + ( [ 6 6$0 , 3 3$0 , 1 1$0 ] [ difficulty ] ) ;
5178: LD_ADDR_VAR 0 1
5182: PUSH
5183: LD_OWVAR 1
5187: PUSH
5188: LD_INT 12600
5190: PUSH
5191: LD_INT 6300
5193: PUSH
5194: LD_INT 2100
5196: PUSH
5197: EMPTY
5198: LIST
5199: LIST
5200: LIST
5201: PUSH
5202: LD_OWVAR 67
5206: ARRAY
5207: PLUS
5208: ST_TO_ADDR
// repeat wait ( 0 0$3 ) ;
5209: LD_INT 105
5211: PPUSH
5212: CALL_OW 67
// until ( TICK > blast_time ) or IsInArea ( truck1 , half_line ) or IsInArea ( truck2 , half_line ) or IsInArea ( truck1 , leave_blast ) or IsInArea ( truck2 , leave_blast ) ;
5216: LD_OWVAR 1
5220: PUSH
5221: LD_VAR 0 1
5225: GREATER
5226: PUSH
5227: LD_EXP 7
5231: PPUSH
5232: LD_INT 5
5234: PPUSH
5235: CALL_OW 308
5239: OR
5240: PUSH
5241: LD_EXP 8
5245: PPUSH
5246: LD_INT 5
5248: PPUSH
5249: CALL_OW 308
5253: OR
5254: PUSH
5255: LD_EXP 7
5259: PPUSH
5260: LD_INT 8
5262: PPUSH
5263: CALL_OW 308
5267: OR
5268: PUSH
5269: LD_EXP 8
5273: PPUSH
5274: LD_INT 8
5276: PPUSH
5277: CALL_OW 308
5281: OR
5282: IFFALSE 5209
// blast_time := tick ;
5284: LD_ADDR_VAR 0 1
5288: PUSH
5289: LD_OWVAR 1
5293: ST_TO_ADDR
// DialogueOn ;
5294: CALL_OW 6
// interface_hidden := true ;
5298: LD_ADDR_OWVAR 54
5302: PUSH
5303: LD_INT 1
5305: ST_TO_ADDR
// CenterOnXY ( 103 , 52 ) ;
5306: LD_INT 103
5308: PPUSH
5309: LD_INT 52
5311: PPUSH
5312: CALL_OW 84
// wait ( 0 0$3 ) ;
5316: LD_INT 105
5318: PPUSH
5319: CALL_OW 67
// PrepareSiberiteRocket ;
5323: CALL_OW 357
// SendSiberiteRocket ( 103 , 52 ) ;
5327: LD_INT 103
5329: PPUSH
5330: LD_INT 52
5332: PPUSH
5333: CALL_OW 429
// interface_hidden := false ;
5337: LD_ADDR_OWVAR 54
5341: PUSH
5342: LD_INT 0
5344: ST_TO_ADDR
// DialogueOff ;
5345: CALL_OW 7
// blast_done := true ;
5349: LD_ADDR_EXP 28
5353: PUSH
5354: LD_INT 1
5356: ST_TO_ADDR
// contamine := TICK + 6000 ;
5357: LD_ADDR_EXP 30
5361: PUSH
5362: LD_OWVAR 1
5366: PUSH
5367: LD_INT 6000
5369: PLUS
5370: ST_TO_ADDR
// wait ( 0 0$4 ) ;
5371: LD_INT 140
5373: PPUSH
5374: CALL_OW 67
// if not IsLive ( Burlak ) then
5378: LD_EXP 2
5382: PPUSH
5383: CALL_OW 300
5387: NOT
5388: IFFALSE 5397
// Mission_Failed ( 1 ) ;
5390: LD_INT 1
5392: PPUSH
5393: CALL 1361 0 1
// if not IsLive ( MacMillan ) then
5397: LD_EXP 1
5401: PPUSH
5402: CALL_OW 300
5406: NOT
5407: IFFALSE 5416
// Mission_Failed ( 2 ) ;
5409: LD_INT 2
5411: PPUSH
5412: CALL 1361 0 1
// if not ( FindArtifact ( 4 ) or art_cargo ) then
5416: LD_INT 4
5418: PPUSH
5419: CALL_OW 469
5423: PUSH
5424: LD_EXP 32
5428: OR
5429: NOT
5430: IFFALSE 5439
// Mission_Failed ( 4 ) ;
5432: LD_INT 4
5434: PPUSH
5435: CALL 1361 0 1
// after_the_blast ;
5439: CALL 5452 0 0
// enable ( 5 ) ;
5443: LD_INT 5
5445: ENABLE_MARKED
// enable ( 7 ) ;
5446: LD_INT 7
5448: ENABLE_MARKED
// end ;
5449: PPOPN 1
5451: END
// function after_the_blast ; begin
5452: LD_INT 0
5454: PPUSH
// blast_was_seen := true ;
5455: LD_ADDR_EXP 9
5459: PUSH
5460: LD_INT 1
5462: ST_TO_ADDR
// DialogueOn ;
5463: CALL_OW 6
// interface_hidden := true ;
5467: LD_ADDR_OWVAR 54
5471: PUSH
5472: LD_INT 1
5474: ST_TO_ADDR
// Say ( MacMillan , D6a-JMM-1 ) ;
5475: LD_EXP 1
5479: PPUSH
5480: LD_STRING D6a-JMM-1
5482: PPUSH
5483: CALL_OW 88
// Say ( Burlak , D6a-Bur-1 ) ;
5487: LD_EXP 2
5491: PPUSH
5492: LD_STRING D6a-Bur-1
5494: PPUSH
5495: CALL_OW 88
// enable ( 8 ) ;
5499: LD_INT 8
5501: ENABLE_MARKED
// Say ( MacMillan , D6c-JMM-1 ) ;
5502: LD_EXP 1
5506: PPUSH
5507: LD_STRING D6c-JMM-1
5509: PPUSH
5510: CALL_OW 88
// Say ( Burlak , D6c-Bur-1 ) ;
5514: LD_EXP 2
5518: PPUSH
5519: LD_STRING D6c-Bur-1
5521: PPUSH
5522: CALL_OW 88
// Say ( MacMillan , D6c-JMM-2 ) ;
5526: LD_EXP 1
5530: PPUSH
5531: LD_STRING D6c-JMM-2
5533: PPUSH
5534: CALL_OW 88
// ChangeMissionObjectives ( MBase ) ;
5538: LD_STRING MBase
5540: PPUSH
5541: CALL_OW 337
// interface_hidden := false ;
5545: LD_ADDR_OWVAR 54
5549: PUSH
5550: LD_INT 0
5552: ST_TO_ADDR
// DialogueOff ;
5553: CALL_OW 7
// enable ( 6 ) ;
5557: LD_INT 6
5559: ENABLE_MARKED
// end ;
5560: LD_VAR 0 1
5564: RET
// every 0 0$1 trigger FilterAllUnits ( [ [ f_side , you ] , [ f_distxy , 103 , 52 , 27 ] ] ) marked 8 do
5565: LD_INT 22
5567: PUSH
5568: LD_EXP 17
5572: PUSH
5573: EMPTY
5574: LIST
5575: LIST
5576: PUSH
5577: LD_INT 92
5579: PUSH
5580: LD_INT 103
5582: PUSH
5583: LD_INT 52
5585: PUSH
5586: LD_INT 27
5588: PUSH
5589: EMPTY
5590: LIST
5591: LIST
5592: LIST
5593: LIST
5594: PUSH
5595: EMPTY
5596: LIST
5597: LIST
5598: PPUSH
5599: CALL_OW 69
5603: IFFALSE 5674
5605: GO 5607
5607: DISABLE
// begin CenterOnUnits ( [ MacMillan , Burlak ] ) ;
5608: LD_EXP 1
5612: PUSH
5613: LD_EXP 2
5617: PUSH
5618: EMPTY
5619: LIST
5620: LIST
5621: PPUSH
5622: CALL_OW 85
// DialogueOn ;
5626: CALL_OW 6
// interface_hidden := true ;
5630: LD_ADDR_OWVAR 54
5634: PUSH
5635: LD_INT 1
5637: ST_TO_ADDR
// Say ( MacMillan , D6b-JMM-1 ) ;
5638: LD_EXP 1
5642: PPUSH
5643: LD_STRING D6b-JMM-1
5645: PPUSH
5646: CALL_OW 88
// Say ( Burlak , D6b-Bur-1 ) ;
5650: LD_EXP 2
5654: PPUSH
5655: LD_STRING D6b-Bur-1
5657: PPUSH
5658: CALL_OW 88
// interface_hidden := false ;
5662: LD_ADDR_OWVAR 54
5666: PUSH
5667: LD_INT 0
5669: ST_TO_ADDR
// DialogueOff ;
5670: CALL_OW 7
// end ;
5674: END
// every 0 0$1 trigger IsInArea ( MacMillan , blast_area ) and ( contamine > TICK ) marked 6 do
5675: LD_EXP 1
5679: PPUSH
5680: LD_INT 6
5682: PPUSH
5683: CALL_OW 308
5687: PUSH
5688: LD_EXP 30
5692: PUSH
5693: LD_OWVAR 1
5697: GREATER
5698: AND
5699: IFFALSE 5757
5701: GO 5703
5703: DISABLE
// begin CenterOnUnits ( MacMillan ) ;
5704: LD_EXP 1
5708: PPUSH
5709: CALL_OW 85
// DialogueOn ;
5713: CALL_OW 6
// interface_hidden := true ;
5717: LD_ADDR_OWVAR 54
5721: PUSH
5722: LD_INT 1
5724: ST_TO_ADDR
// Say ( MacMillan , D7-JMM-1 ) ;
5725: LD_EXP 1
5729: PPUSH
5730: LD_STRING D7-JMM-1
5732: PPUSH
5733: CALL_OW 88
// interface_hidden := false ;
5737: LD_ADDR_OWVAR 54
5741: PUSH
5742: LD_INT 0
5744: ST_TO_ADDR
// DialogueOff ;
5745: CALL_OW 7
// entered_contaminated_area := true ;
5749: LD_ADDR_EXP 12
5753: PUSH
5754: LD_INT 1
5756: ST_TO_ADDR
// end ;
5757: END
// every 0 0$1 trigger IsInArea ( Burlak , blast_area ) and ( contamine > TICK ) marked 6 do
5758: LD_EXP 2
5762: PPUSH
5763: LD_INT 6
5765: PPUSH
5766: CALL_OW 308
5770: PUSH
5771: LD_EXP 30
5775: PUSH
5776: LD_OWVAR 1
5780: GREATER
5781: AND
5782: IFFALSE 5840
5784: GO 5786
5786: DISABLE
// begin CenterOnUnits ( Burlak ) ;
5787: LD_EXP 2
5791: PPUSH
5792: CALL_OW 85
// DialogueOn ;
5796: CALL_OW 6
// interface_hidden := true ;
5800: LD_ADDR_OWVAR 54
5804: PUSH
5805: LD_INT 1
5807: ST_TO_ADDR
// Say ( Burlak , D7-Bur-1 ) ;
5808: LD_EXP 2
5812: PPUSH
5813: LD_STRING D7-Bur-1
5815: PPUSH
5816: CALL_OW 88
// interface_hidden := false ;
5820: LD_ADDR_OWVAR 54
5824: PUSH
5825: LD_INT 0
5827: ST_TO_ADDR
// DialogueOff ;
5828: CALL_OW 7
// entered_contaminated_area := true ;
5832: LD_ADDR_EXP 12
5836: PUSH
5837: LD_INT 1
5839: ST_TO_ADDR
// end ;
5840: END
// every 0 0$10 marked 5 do var time_limit , warning_time ;
5841: GO 5843
5843: DISABLE
5844: LD_INT 0
5846: PPUSH
5847: PPUSH
// begin time_limit := [ 5 5$0 , 4 4$0 , 3 3$0 ] ;
5848: LD_ADDR_VAR 0 1
5852: PUSH
5853: LD_INT 10500
5855: PUSH
5856: LD_INT 8400
5858: PUSH
5859: LD_INT 6300
5861: PUSH
5862: EMPTY
5863: LIST
5864: LIST
5865: LIST
5866: ST_TO_ADDR
// warning_time := TICK + time_limit [ difficulty ] ;
5867: LD_ADDR_VAR 0 2
5871: PUSH
5872: LD_OWVAR 1
5876: PUSH
5877: LD_VAR 0 1
5881: PUSH
5882: LD_OWVAR 67
5886: ARRAY
5887: PLUS
5888: ST_TO_ADDR
// repeat wait ( 0 0$10 ) ;
5889: LD_INT 350
5891: PPUSH
5892: CALL_OW 67
// until TICK > warning_time ;
5896: LD_OWVAR 1
5900: PUSH
5901: LD_VAR 0 2
5905: GREATER
5906: IFFALSE 5889
// if ( not query_started ) or ( not technology_taken ) then
5908: LD_EXP 29
5912: NOT
5913: PUSH
5914: LD_EXP 15
5918: NOT
5919: OR
5920: IFFALSE 5934
// Say ( MacMillan , D8-JMM-1 ) ;
5922: LD_EXP 1
5926: PPUSH
5927: LD_STRING D8-JMM-1
5929: PPUSH
5930: CALL_OW 88
// end ;
5934: PPOPN 2
5936: END
// every 0 0$2 trigger See ( you , oil_2 ) do
5937: LD_EXP 17
5941: PPUSH
5942: LD_INT 9
5944: PPUSH
5945: CALL_OW 292
5949: IFFALSE 6009
5951: GO 5953
5953: DISABLE
// begin CenterOnUnits ( oil_2 ) ;
5954: LD_INT 9
5956: PPUSH
5957: CALL_OW 85
// DialogueOn ;
5961: CALL_OW 6
// interface_hidden := true ;
5965: LD_ADDR_OWVAR 54
5969: PUSH
5970: LD_INT 1
5972: ST_TO_ADDR
// Say ( Burlak , D9-Bur-1 ) ;
5973: LD_EXP 2
5977: PPUSH
5978: LD_STRING D9-Bur-1
5980: PPUSH
5981: CALL_OW 88
// Say ( MacMillan , D9-JMM-1 ) ;
5985: LD_EXP 1
5989: PPUSH
5990: LD_STRING D9-JMM-1
5992: PPUSH
5993: CALL_OW 88
// interface_hidden := false ;
5997: LD_ADDR_OWVAR 54
6001: PUSH
6002: LD_INT 0
6004: ST_TO_ADDR
// DialogueOff ;
6005: CALL_OW 7
// end ;
6009: END
// export function query_kill ; var odpoved ; begin
6010: LD_INT 0
6012: PPUSH
6013: PPUSH
// query_started := true ;
6014: LD_ADDR_EXP 29
6018: PUSH
6019: LD_INT 1
6021: ST_TO_ADDR
// if Query ( QKill ) = 1 then
6022: LD_STRING QKill
6024: PPUSH
6025: CALL_OW 97
6029: PUSH
6030: LD_INT 1
6032: EQUAL
6033: IFFALSE 6041
// query_vyjednavat else
6035: CALL 6050 0 0
6039: GO 6045
// query_pozabijet ;
6041: CALL 6611 0 0
// end ;
6045: LD_VAR 0 1
6049: RET
// function query_vyjednavat ; var un , vedci , list ; begin
6050: LD_INT 0
6052: PPUSH
6053: PPUSH
6054: PPUSH
6055: PPUSH
// SetAttitude ( you , americans , att_friend , true ) ;
6056: LD_EXP 17
6060: PPUSH
6061: LD_EXP 18
6065: PPUSH
6066: LD_INT 1
6068: PPUSH
6069: LD_INT 1
6071: PPUSH
6072: CALL_OW 80
// list := FilterAllUnits ( [ [ f_side , americans ] , [ f_type , unit_human ] ] ) ;
6076: LD_ADDR_VAR 0 4
6080: PUSH
6081: LD_INT 22
6083: PUSH
6084: LD_EXP 18
6088: PUSH
6089: EMPTY
6090: LIST
6091: LIST
6092: PUSH
6093: LD_INT 21
6095: PUSH
6096: LD_INT 1
6098: PUSH
6099: EMPTY
6100: LIST
6101: LIST
6102: PUSH
6103: EMPTY
6104: LIST
6105: LIST
6106: PPUSH
6107: CALL_OW 69
6111: ST_TO_ADDR
// for un in list do
6112: LD_ADDR_VAR 0 2
6116: PUSH
6117: LD_VAR 0 4
6121: PUSH
6122: FOR_IN
6123: IFFALSE 6204
// if not IsInUnit ( un ) then
6125: LD_VAR 0 2
6129: PPUSH
6130: CALL_OW 310
6134: NOT
6135: IFFALSE 6202
// ComMoveXY ( un , ShiftX ( GetX ( un ) , GetDir ( un ) , 1 ) , ShiftY ( GetY ( un ) , GetDir ( un ) , 1 ) ) ;
6137: LD_VAR 0 2
6141: PPUSH
6142: LD_VAR 0 2
6146: PPUSH
6147: CALL_OW 250
6151: PPUSH
6152: LD_VAR 0 2
6156: PPUSH
6157: CALL_OW 254
6161: PPUSH
6162: LD_INT 1
6164: PPUSH
6165: CALL_OW 272
6169: PPUSH
6170: LD_VAR 0 2
6174: PPUSH
6175: CALL_OW 251
6179: PPUSH
6180: LD_VAR 0 2
6184: PPUSH
6185: CALL_OW 254
6189: PPUSH
6190: LD_INT 1
6192: PPUSH
6193: CALL_OW 273
6197: PPUSH
6198: CALL_OW 111
6202: GO 6122
6204: POP
6205: POP
// Wait ( 10 ) ;
6206: LD_INT 10
6208: PPUSH
6209: CALL_OW 67
// CenterOnUnits ( [ us_lab ] ) ;
6213: LD_INT 1
6215: PUSH
6216: EMPTY
6217: LIST
6218: PPUSH
6219: CALL_OW 85
// InGameOn ;
6223: CALL_OW 8
// if GetLives ( us_lab ) > 300 then
6227: LD_INT 1
6229: PPUSH
6230: CALL_OW 256
6234: PUSH
6235: LD_INT 300
6237: GREATER
6238: IFFALSE 6249
// ComExitBuilding ( us_sci ) ;
6240: LD_EXP 22
6244: PPUSH
6245: CALL_OW 122
// Check_Heroes ;
6249: CALL 7169 0 0
// Say ( MacMillan , D10a-JMM-1 ) ;
6253: LD_EXP 1
6257: PPUSH
6258: LD_STRING D10a-JMM-1
6260: PPUSH
6261: CALL_OW 88
// Say ( Burlak , D10a-Bur-1 ) ;
6265: LD_EXP 2
6269: PPUSH
6270: LD_STRING D10a-Bur-1
6272: PPUSH
6273: CALL_OW 88
// Say ( MacMillan , D10a-JMM-2 ) ;
6277: LD_EXP 1
6281: PPUSH
6282: LD_STRING D10a-JMM-2
6284: PPUSH
6285: CALL_OW 88
// if original_stevens then
6289: LD_EXP 13
6293: IFFALSE 6405
// begin if GetDistUnitArea ( MacMillan , us_base ) = 0 then
6295: LD_EXP 1
6299: PPUSH
6300: LD_INT 1
6302: PPUSH
6303: CALL_OW 299
6307: PUSH
6308: LD_INT 0
6310: EQUAL
6311: IFFALSE 6329
// ComMoveUnit ( Stevens , MacMillan ) else
6313: LD_EXP 6
6317: PPUSH
6318: LD_EXP 1
6322: PPUSH
6323: CALL_OW 112
6327: GO 6343
// ComMoveUnit ( Stevens , Burlak ) ;
6329: LD_EXP 6
6333: PPUSH
6334: LD_EXP 2
6338: PPUSH
6339: CALL_OW 112
// Say ( Stevens , D10a-Huck-2 ) ;
6343: LD_EXP 6
6347: PPUSH
6348: LD_STRING D10a-Huck-2
6350: PPUSH
6351: CALL_OW 88
// if Joan then
6355: LD_EXP 3
6359: IFFALSE 6385
// begin Say ( MacMillan , D10a-JMM-3 ) ;
6361: LD_EXP 1
6365: PPUSH
6366: LD_STRING D10a-JMM-3
6368: PPUSH
6369: CALL_OW 88
// Say ( Stevens , D10a-Huck-3 ) ;
6373: LD_EXP 6
6377: PPUSH
6378: LD_STRING D10a-Huck-3
6380: PPUSH
6381: CALL_OW 88
// end ; repeat wait ( 0 0$1 ) ;
6385: LD_INT 35
6387: PPUSH
6388: CALL_OW 67
// until IsBusy ( Stevens ) ;
6392: LD_EXP 6
6396: PPUSH
6397: CALL_OW 315
6401: IFFALSE 6385
// end else
6403: GO 6549
// begin vedci := FilterAllUnits ( [ [ f_side , americans ] , [ f_class , class_scientistic ] ] ) ;
6405: LD_ADDR_VAR 0 3
6409: PUSH
6410: LD_INT 22
6412: PUSH
6413: LD_EXP 18
6417: PUSH
6418: EMPTY
6419: LIST
6420: LIST
6421: PUSH
6422: LD_INT 25
6424: PUSH
6425: LD_INT 4
6427: PUSH
6428: EMPTY
6429: LIST
6430: LIST
6431: PUSH
6432: EMPTY
6433: LIST
6434: LIST
6435: PPUSH
6436: CALL_OW 69
6440: ST_TO_ADDR
// if vedci then
6441: LD_VAR 0 3
6445: IFFALSE 6463
// un := vedci [ 1 ] else
6447: LD_ADDR_VAR 0 2
6451: PUSH
6452: LD_VAR 0 3
6456: PUSH
6457: LD_INT 1
6459: ARRAY
6460: ST_TO_ADDR
6461: GO 6471
// un := 0 ;
6463: LD_ADDR_VAR 0 2
6467: PUSH
6468: LD_INT 0
6470: ST_TO_ADDR
// Say ( un , D10a-ASci1-3 ) ;
6471: LD_VAR 0 2
6475: PPUSH
6476: LD_STRING D10a-ASci1-3
6478: PPUSH
6479: CALL_OW 88
// if GetDistUnitArea ( Burlak , us_base ) = 0 then
6483: LD_EXP 2
6487: PPUSH
6488: LD_INT 1
6490: PPUSH
6491: CALL_OW 299
6495: PUSH
6496: LD_INT 0
6498: EQUAL
6499: IFFALSE 6517
// ComMoveUnit ( un , Burlak ) else
6501: LD_VAR 0 2
6505: PPUSH
6506: LD_EXP 2
6510: PPUSH
6511: CALL_OW 112
6515: GO 6531
// ComMoveUnit ( un , MacMillan ) ;
6517: LD_VAR 0 2
6521: PPUSH
6522: LD_EXP 1
6526: PPUSH
6527: CALL_OW 112
// repeat wait ( 0 0$1 ) ;
6531: LD_INT 35
6533: PPUSH
6534: CALL_OW 67
// until IsBusy ( un ) ;
6538: LD_VAR 0 2
6542: PPUSH
6543: CALL_OW 315
6547: IFFALSE 6531
// end ; ComStop ( un ) ;
6549: LD_VAR 0 2
6553: PPUSH
6554: CALL_OW 141
// Say ( MacMillan , D10a-JMM-4 ) ;
6558: LD_EXP 1
6562: PPUSH
6563: LD_STRING D10a-JMM-4
6565: PPUSH
6566: CALL_OW 88
// technology_taken := true ;
6570: LD_ADDR_EXP 15
6574: PUSH
6575: LD_INT 1
6577: ST_TO_ADDR
// InGameOff ;
6578: CALL_OW 9
// SetAttitude ( you , americans , att_neutral , true ) ;
6582: LD_EXP 17
6586: PPUSH
6587: LD_EXP 18
6591: PPUSH
6592: LD_INT 0
6594: PPUSH
6595: LD_INT 1
6597: PPUSH
6598: CALL_OW 80
// konecny_rozhovor ;
6602: CALL 6989 0 0
// end ;
6606: LD_VAR 0 1
6610: RET
// function query_pozabijet ; var un , list , defenders , intruders ; begin
6611: LD_INT 0
6613: PPUSH
6614: PPUSH
6615: PPUSH
6616: PPUSH
6617: PPUSH
// Check_Heroes ;
6618: CALL 7169 0 0
// DialogueOn ;
6622: CALL_OW 6
// interface_hidden := true ;
6626: LD_ADDR_OWVAR 54
6630: PUSH
6631: LD_INT 1
6633: ST_TO_ADDR
// Say ( MacMillan , D10b-JMM-1 ) ;
6634: LD_EXP 1
6638: PPUSH
6639: LD_STRING D10b-JMM-1
6641: PPUSH
6642: CALL_OW 88
// if FilterAllUnits ( [ [ f_side , americans ] , [ f_btype , b_warehouse ] ] ) then
6646: LD_INT 22
6648: PUSH
6649: LD_EXP 18
6653: PUSH
6654: EMPTY
6655: LIST
6656: LIST
6657: PUSH
6658: LD_INT 30
6660: PUSH
6661: LD_INT 1
6663: PUSH
6664: EMPTY
6665: LIST
6666: LIST
6667: PUSH
6668: EMPTY
6669: LIST
6670: LIST
6671: PPUSH
6672: CALL_OW 69
6676: IFFALSE 6690
// Say ( Burlak , D10b-Bur-1 ) ;
6678: LD_EXP 2
6682: PPUSH
6683: LD_STRING D10b-Bur-1
6685: PPUSH
6686: CALL_OW 88
// interface_hidden := false ;
6690: LD_ADDR_OWVAR 54
6694: PUSH
6695: LD_INT 0
6697: ST_TO_ADDR
// DialogueOff ;
6698: CALL_OW 7
// enable ( 9 ) ;
6702: LD_INT 9
6704: ENABLE_MARKED
// repeat ComMoveToArea ( us_sci , leave_area ) ;
6705: LD_EXP 22
6709: PPUSH
6710: LD_INT 7
6712: PPUSH
6713: CALL_OW 113
// defenders := FilterAllUnits ( [ [ f_side , americans ] , [ f_class , class_soldier ] ] ) ;
6717: LD_ADDR_VAR 0 4
6721: PUSH
6722: LD_INT 22
6724: PUSH
6725: LD_EXP 18
6729: PUSH
6730: EMPTY
6731: LIST
6732: LIST
6733: PUSH
6734: LD_INT 25
6736: PUSH
6737: LD_INT 1
6739: PUSH
6740: EMPTY
6741: LIST
6742: LIST
6743: PUSH
6744: EMPTY
6745: LIST
6746: LIST
6747: PPUSH
6748: CALL_OW 69
6752: ST_TO_ADDR
// intruders := FilterUnitsInArea ( us_base , [ [ f_side , you ] , [ f_or , [ f_type , unit_human ] , [ f_type , unit_vehicle ] ] ] ) ;
6753: LD_ADDR_VAR 0 5
6757: PUSH
6758: LD_INT 1
6760: PPUSH
6761: LD_INT 22
6763: PUSH
6764: LD_EXP 17
6768: PUSH
6769: EMPTY
6770: LIST
6771: LIST
6772: PUSH
6773: LD_INT 2
6775: PUSH
6776: LD_INT 21
6778: PUSH
6779: LD_INT 1
6781: PUSH
6782: EMPTY
6783: LIST
6784: LIST
6785: PUSH
6786: LD_INT 21
6788: PUSH
6789: LD_INT 2
6791: PUSH
6792: EMPTY
6793: LIST
6794: LIST
6795: PUSH
6796: EMPTY
6797: LIST
6798: LIST
6799: LIST
6800: PUSH
6801: EMPTY
6802: LIST
6803: LIST
6804: PPUSH
6805: CALL_OW 70
6809: ST_TO_ADDR
// if intruders then
6810: LD_VAR 0 5
6814: IFFALSE 6834
// ComAttackUnit ( defenders , intruders [ 1 ] ) ;
6816: LD_VAR 0 4
6820: PPUSH
6821: LD_VAR 0 5
6825: PUSH
6826: LD_INT 1
6828: ARRAY
6829: PPUSH
6830: CALL_OW 115
// wait ( 0 0$1 ) ;
6834: LD_INT 35
6836: PPUSH
6837: CALL_OW 67
// until ( not us_sci ) or lab_destroyed or ( not intruders ) ;
6841: LD_EXP 22
6845: NOT
6846: PUSH
6847: LD_EXP 10
6851: OR
6852: PUSH
6853: LD_VAR 0 5
6857: NOT
6858: OR
6859: IFFALSE 6705
// ComExitBuilding ( defenders ) ;
6861: LD_VAR 0 4
6865: PPUSH
6866: CALL_OW 122
// repeat list := FilterAllUnits ( [ [ f_see , americans ] , [ f_side , you ] ] ) ;
6870: LD_ADDR_VAR 0 3
6874: PUSH
6875: LD_INT 101
6877: PUSH
6878: LD_EXP 18
6882: PUSH
6883: EMPTY
6884: LIST
6885: LIST
6886: PUSH
6887: LD_INT 22
6889: PUSH
6890: LD_EXP 17
6894: PUSH
6895: EMPTY
6896: LIST
6897: LIST
6898: PUSH
6899: EMPTY
6900: LIST
6901: LIST
6902: PPUSH
6903: CALL_OW 69
6907: ST_TO_ADDR
// if list then
6908: LD_VAR 0 3
6912: IFFALSE 6934
// ComAttackUnit ( defenders , list [ 1 ] ) else
6914: LD_VAR 0 4
6918: PPUSH
6919: LD_VAR 0 3
6923: PUSH
6924: LD_INT 1
6926: ARRAY
6927: PPUSH
6928: CALL_OW 115
6932: GO 6959
// if GetLives ( us_lab ) > 1 then
6934: LD_INT 1
6936: PPUSH
6937: CALL_OW 256
6941: PUSH
6942: LD_INT 1
6944: GREATER
6945: IFFALSE 6959
// ComAttackUnit ( defenders , us_lab ) ;
6947: LD_VAR 0 4
6951: PPUSH
6952: LD_INT 1
6954: PPUSH
6955: CALL_OW 115
// wait ( 0 0$1 ) ;
6959: LD_INT 35
6961: PPUSH
6962: CALL_OW 67
// until lab_destroyed ;
6966: LD_EXP 10
6970: IFFALSE 6870
// ComMoveToArea ( defenders , leave_area ) ;
6972: LD_VAR 0 4
6976: PPUSH
6977: LD_INT 7
6979: PPUSH
6980: CALL_OW 113
// end ;
6984: LD_VAR 0 1
6988: RET
// export function konecny_rozhovor ; var art_ready ; begin
6989: LD_INT 0
6991: PPUSH
6992: PPUSH
// if not dokecano then
6993: LD_EXP 33
6997: NOT
6998: IFFALSE 7057
// begin dokecano := true ;
7000: LD_ADDR_EXP 33
7004: PUSH
7005: LD_INT 1
7007: ST_TO_ADDR
// DialogueOn ;
7008: CALL_OW 6
// interface_hidden := true ;
7012: LD_ADDR_OWVAR 54
7016: PUSH
7017: LD_INT 1
7019: ST_TO_ADDR
// Say ( Burlak , D11-Bur-1 ) ;
7020: LD_EXP 2
7024: PPUSH
7025: LD_STRING D11-Bur-1
7027: PPUSH
7028: CALL_OW 88
// ChangeMissionObjectives ( MEnd ) ;
7032: LD_STRING MEnd
7034: PPUSH
7035: CALL_OW 337
// enable ( 10 ) ;
7039: LD_INT 10
7041: ENABLE_MARKED
// disable ( 1 ) ;
7042: LD_INT 1
7044: DISABLE_MARKED
// interface_hidden := false ;
7045: LD_ADDR_OWVAR 54
7049: PUSH
7050: LD_INT 0
7052: ST_TO_ADDR
// DialogueOff ;
7053: CALL_OW 7
// end ; SetAreaMapShow ( exit_area , 1 ) ;
7057: LD_INT 11
7059: PPUSH
7060: LD_INT 1
7062: PPUSH
7063: CALL_OW 424
// repeat wait ( 0 0$2 ) ;
7067: LD_INT 70
7069: PPUSH
7070: CALL_OW 67
// if art_cargo and not IsInArea ( art_cargo , us_base ) then
7074: LD_EXP 32
7078: PUSH
7079: LD_EXP 32
7083: PPUSH
7084: LD_INT 1
7086: PPUSH
7087: CALL_OW 308
7091: NOT
7092: AND
7093: IFFALSE 7105
// art_ready := true else
7095: LD_ADDR_VAR 0 2
7099: PUSH
7100: LD_INT 1
7102: ST_TO_ADDR
7103: GO 7113
// art_ready := false ;
7105: LD_ADDR_VAR 0 2
7109: PUSH
7110: LD_INT 0
7112: ST_TO_ADDR
// until not ( IsInArea ( MacMillan , us_base ) or IsInArea ( Burlak , us_base ) or not art_ready ) ;
7113: LD_EXP 1
7117: PPUSH
7118: LD_INT 1
7120: PPUSH
7121: CALL_OW 308
7125: PUSH
7126: LD_EXP 2
7130: PPUSH
7131: LD_INT 1
7133: PPUSH
7134: CALL_OW 308
7138: OR
7139: PUSH
7140: LD_VAR 0 2
7144: NOT
7145: OR
7146: NOT
7147: IFFALSE 7067
// wait ( 0 0$2 ) ;
7149: LD_INT 70
7151: PPUSH
7152: CALL_OW 67
// konec_mise ;
7156: CALL 955 0 0
// DialogueOff ;
7160: CALL_OW 7
// end ;
7164: LD_VAR 0 1
7168: RET
// function Check_Heroes ; begin
7169: LD_INT 0
7171: PPUSH
// if not IsOK ( MacMillan ) then
7172: LD_EXP 1
7176: PPUSH
7177: CALL_OW 302
7181: NOT
7182: IFFALSE 7191
// YouLost ( 2 ) ;
7184: LD_INT 2
7186: PPUSH
7187: CALL_OW 104
// if not IsOK ( Burlak ) then
7191: LD_EXP 2
7195: PPUSH
7196: CALL_OW 302
7200: NOT
7201: IFFALSE 7210
// YouLost ( 1 ) ;
7203: LD_INT 1
7205: PPUSH
7206: CALL_OW 104
// end ; end_of_file
7210: LD_VAR 0 1
7214: RET
// every 0 0$1 marked 7 do var list , un ;
7215: GO 7217
7217: DISABLE
7218: LD_INT 0
7220: PPUSH
7221: PPUSH
// begin list := FilterAllUnits ( [ [ f_side , americans ] , [ f_type , unit_building ] , [ f_or , [ f_btype , b_turret ] , [ f_btype , b_bunker ] ] , f_not , [ f_lives , 1000 ] ] ) ;
7222: LD_ADDR_VAR 0 1
7226: PUSH
7227: LD_INT 22
7229: PUSH
7230: LD_EXP 18
7234: PUSH
7235: EMPTY
7236: LIST
7237: LIST
7238: PUSH
7239: LD_INT 21
7241: PUSH
7242: LD_INT 3
7244: PUSH
7245: EMPTY
7246: LIST
7247: LIST
7248: PUSH
7249: LD_INT 2
7251: PUSH
7252: LD_INT 30
7254: PUSH
7255: LD_INT 33
7257: PUSH
7258: EMPTY
7259: LIST
7260: LIST
7261: PUSH
7262: LD_INT 30
7264: PUSH
7265: LD_INT 32
7267: PUSH
7268: EMPTY
7269: LIST
7270: LIST
7271: PUSH
7272: EMPTY
7273: LIST
7274: LIST
7275: LIST
7276: PUSH
7277: LD_INT 3
7279: PUSH
7280: LD_INT 24
7282: PUSH
7283: LD_INT 1000
7285: PUSH
7286: EMPTY
7287: LIST
7288: LIST
7289: PUSH
7290: EMPTY
7291: LIST
7292: LIST
7293: LIST
7294: LIST
7295: LIST
7296: PPUSH
7297: CALL_OW 69
7301: ST_TO_ADDR
// if list then
7302: LD_VAR 0 1
7306: IFFALSE 7317
// repair_base ( list ) ;
7308: LD_VAR 0 1
7312: PPUSH
7313: CALL 7328 0 1
// if not keep_base_finished then
7317: LD_EXP 16
7321: NOT
7322: IFFALSE 7325
// enable ;
7324: ENABLE
// end ;
7325: PPOPN 2
7327: END
// function repair_base ( list ) ; var un , driver ; begin
7328: LD_INT 0
7330: PPUSH
7331: PPUSH
7332: PPUSH
// repeat if keep_base_finished then
7333: LD_EXP 16
7337: IFFALSE 7341
// exit ;
7339: GO 7533
// if list then
7341: LD_VAR 0 1
7345: IFFALSE 7365
// ComRepairBuilding ( crane , list [ 1 ] ) else
7347: LD_INT 15
7349: PPUSH
7350: LD_VAR 0 1
7354: PUSH
7355: LD_INT 1
7357: ARRAY
7358: PPUSH
7359: CALL_OW 130
7363: GO 7367
// exit ;
7365: GO 7533
// if GetLives ( crane ) < 700 then
7367: LD_INT 15
7369: PPUSH
7370: CALL_OW 256
7374: PUSH
7375: LD_INT 700
7377: LESS
7378: IFFALSE 7480
// begin ComMoveToArea ( crane , am_repair ) ;
7380: LD_INT 15
7382: PPUSH
7383: LD_INT 10
7385: PPUSH
7386: CALL_OW 113
// while not IsInArea ( crane , am_repair ) do
7390: LD_INT 15
7392: PPUSH
7393: LD_INT 10
7395: PPUSH
7396: CALL_OW 308
7400: NOT
7401: IFFALSE 7412
// wait ( 0 0$1 ) ;
7403: LD_INT 35
7405: PPUSH
7406: CALL_OW 67
7410: GO 7390
// ComExitVehicle ( crane ) ;
7412: LD_INT 15
7414: PPUSH
7415: CALL_OW 121
// while IsDrivenBy ( crane ) do
7419: LD_INT 15
7421: PPUSH
7422: CALL_OW 311
7426: IFFALSE 7437
// wait ( 10 ) ;
7428: LD_INT 10
7430: PPUSH
7431: CALL_OW 67
7435: GO 7419
// ComRepairVehicle ( us_mech , crane ) ;
7437: LD_EXP 23
7441: PPUSH
7442: LD_INT 15
7444: PPUSH
7445: CALL_OW 129
// AddComEnterUnit ( us_mech , crane ) ;
7449: LD_EXP 23
7453: PPUSH
7454: LD_INT 15
7456: PPUSH
7457: CALL_OW 180
// while not IsDrivenBy ( crane ) do
7461: LD_INT 15
7463: PPUSH
7464: CALL_OW 311
7468: NOT
7469: IFFALSE 7480
// wait ( 0 0$1 ) ;
7471: LD_INT 35
7473: PPUSH
7474: CALL_OW 67
7478: GO 7461
// end ; if GetLives ( list [ 1 ] ) = 1000 then
7480: LD_VAR 0 1
7484: PUSH
7485: LD_INT 1
7487: ARRAY
7488: PPUSH
7489: CALL_OW 256
7493: PUSH
7494: LD_INT 1000
7496: EQUAL
7497: IFFALSE 7519
// list := list diff list [ 1 ] ;
7499: LD_ADDR_VAR 0 1
7503: PUSH
7504: LD_VAR 0 1
7508: PUSH
7509: LD_VAR 0 1
7513: PUSH
7514: LD_INT 1
7516: ARRAY
7517: DIFF
7518: ST_TO_ADDR
// wait ( 0 0$1 ) ;
7519: LD_INT 35
7521: PPUSH
7522: CALL_OW 67
// until not list ;
7526: LD_VAR 0 1
7530: NOT
7531: IFFALSE 7333
// end ; end_of_file
7533: LD_VAR 0 2
7537: RET
// every 0 0$2 + 0 0$0.1 do
7538: GO 7540
7540: DISABLE
// begin if FilterAllUnits ( [ [ f_side , 7 ] , [ f_or , [ f_class , class_apeman ] , [ f_class , class_apeman_engineer ] , [ f_class , class_apeman_soldier ] , [ f_class , class_apeman_kamikaze ] ] ] ) > FilterAllUnits ( [ [ f_side , 7 ] , [ f_type , unit_human ] , [ f_not , [ f_or , [ f_class , class_apeman ] , [ f_class , class_apeman_engineer ] , [ f_class , class_apeman_soldier ] , [ f_class , class_apeman_kamikaze ] ] ] ] ) then
7541: LD_INT 22
7543: PUSH
7544: LD_INT 7
7546: PUSH
7547: EMPTY
7548: LIST
7549: LIST
7550: PUSH
7551: LD_INT 2
7553: PUSH
7554: LD_INT 25
7556: PUSH
7557: LD_INT 12
7559: PUSH
7560: EMPTY
7561: LIST
7562: LIST
7563: PUSH
7564: LD_INT 25
7566: PUSH
7567: LD_INT 16
7569: PUSH
7570: EMPTY
7571: LIST
7572: LIST
7573: PUSH
7574: LD_INT 25
7576: PUSH
7577: LD_INT 15
7579: PUSH
7580: EMPTY
7581: LIST
7582: LIST
7583: PUSH
7584: LD_INT 25
7586: PUSH
7587: LD_INT 17
7589: PUSH
7590: EMPTY
7591: LIST
7592: LIST
7593: PUSH
7594: EMPTY
7595: LIST
7596: LIST
7597: LIST
7598: LIST
7599: LIST
7600: PUSH
7601: EMPTY
7602: LIST
7603: LIST
7604: PPUSH
7605: CALL_OW 69
7609: PUSH
7610: LD_INT 22
7612: PUSH
7613: LD_INT 7
7615: PUSH
7616: EMPTY
7617: LIST
7618: LIST
7619: PUSH
7620: LD_INT 21
7622: PUSH
7623: LD_INT 1
7625: PUSH
7626: EMPTY
7627: LIST
7628: LIST
7629: PUSH
7630: LD_INT 3
7632: PUSH
7633: LD_INT 2
7635: PUSH
7636: LD_INT 25
7638: PUSH
7639: LD_INT 12
7641: PUSH
7642: EMPTY
7643: LIST
7644: LIST
7645: PUSH
7646: LD_INT 25
7648: PUSH
7649: LD_INT 16
7651: PUSH
7652: EMPTY
7653: LIST
7654: LIST
7655: PUSH
7656: LD_INT 25
7658: PUSH
7659: LD_INT 15
7661: PUSH
7662: EMPTY
7663: LIST
7664: LIST
7665: PUSH
7666: LD_INT 25
7668: PUSH
7669: LD_INT 17
7671: PUSH
7672: EMPTY
7673: LIST
7674: LIST
7675: PUSH
7676: EMPTY
7677: LIST
7678: LIST
7679: LIST
7680: LIST
7681: LIST
7682: PUSH
7683: EMPTY
7684: LIST
7685: LIST
7686: PUSH
7687: EMPTY
7688: LIST
7689: LIST
7690: LIST
7691: PPUSH
7692: CALL_OW 69
7696: GREATER
7697: IFFALSE 7708
// begin SetAchievement ( ACH_POTA ) ;
7699: LD_STRING ACH_POTA
7701: PPUSH
7702: CALL_OW 543
// exit ;
7706: GO 7709
// end ; enable ;
7708: ENABLE
// end ; end_of_file
7709: END
// export function SA_EndMission ( campaignNumber , missionNumber , medal1 , medal2 , medal3 ) ; var achiv ; begin
7710: LD_INT 0
7712: PPUSH
7713: PPUSH
// if not missionNumber then
7714: LD_VAR 0 2
7718: NOT
7719: IFFALSE 7723
// exit ;
7721: GO 7853
// achiv := false ;
7723: LD_ADDR_VAR 0 7
7727: PUSH
7728: LD_INT 0
7730: ST_TO_ADDR
// case campaignNumber of 1 :
7731: LD_VAR 0 1
7735: PUSH
7736: LD_INT 1
7738: DOUBLE
7739: EQUAL
7740: IFTRUE 7744
7742: GO 7755
7744: POP
// achiv := ACH_GOTA ; 2 :
7745: LD_ADDR_VAR 0 7
7749: PUSH
7750: LD_STRING ACH_GOTA
7752: ST_TO_ADDR
7753: GO 7805
7755: LD_INT 2
7757: DOUBLE
7758: EQUAL
7759: IFTRUE 7763
7761: GO 7766
7763: POP
// ; 3 :
7764: GO 7805
7766: LD_INT 3
7768: DOUBLE
7769: EQUAL
7770: IFTRUE 7774
7772: GO 7785
7774: POP
// achiv := ACH_MOTSU ; 4 :
7775: LD_ADDR_VAR 0 7
7779: PUSH
7780: LD_STRING ACH_MOTSU
7782: ST_TO_ADDR
7783: GO 7805
7785: LD_INT 4
7787: DOUBLE
7788: EQUAL
7789: IFTRUE 7793
7791: GO 7804
7793: POP
// achiv := ACH_LOP ; end ;
7794: LD_ADDR_VAR 0 7
7798: PUSH
7799: LD_STRING ACH_LOP
7801: ST_TO_ADDR
7802: GO 7805
7804: POP
// if Difficulty = 3 and achiv and medal1 and medal2 and medal3 then
7805: LD_OWVAR 67
7809: PUSH
7810: LD_INT 3
7812: EQUAL
7813: PUSH
7814: LD_VAR 0 7
7818: AND
7819: PUSH
7820: LD_VAR 0 3
7824: AND
7825: PUSH
7826: LD_VAR 0 4
7830: AND
7831: PUSH
7832: LD_VAR 0 5
7836: AND
7837: IFFALSE 7853
// SetAchievementEX ( achiv , missionNumber ) ;
7839: LD_VAR 0 7
7843: PPUSH
7844: LD_VAR 0 2
7848: PPUSH
7849: CALL_OW 564
// end ;
7853: LD_VAR 0 6
7857: RET
// export function SA_BehemothConstructed ; begin
7858: LD_INT 0
7860: PPUSH
// SetAchievement ( ACH_SMC ) ;
7861: LD_STRING ACH_SMC
7863: PPUSH
7864: CALL_OW 543
// end ;
7868: LD_VAR 0 1
7872: RET
// on CustomCommand ( p1 , p2 , p3 , p4 , p5 , p6 ) do begin case p2 of 1 :
7873: LD_VAR 0 2
7877: PUSH
7878: LD_INT 1
7880: DOUBLE
7881: EQUAL
7882: IFTRUE 7886
7884: GO 7893
7886: POP
// HackUnlimitedResources ; 2 :
7887: CALL 8077 0 0
7891: GO 8074
7893: LD_INT 2
7895: DOUBLE
7896: EQUAL
7897: IFTRUE 7901
7899: GO 7908
7901: POP
// HackSetLevel10 ; 3 :
7902: CALL 8210 0 0
7906: GO 8074
7908: LD_INT 3
7910: DOUBLE
7911: EQUAL
7912: IFTRUE 7916
7914: GO 7923
7916: POP
// HackSetLevel10YourUnits ; 4 :
7917: CALL 8295 0 0
7921: GO 8074
7923: LD_INT 4
7925: DOUBLE
7926: EQUAL
7927: IFTRUE 7931
7929: GO 7953
7931: POP
// HackSpawnHuman ( p3 , p4 , p5 ) ; 5 :
7932: LD_VAR 0 3
7936: PPUSH
7937: LD_VAR 0 4
7941: PPUSH
7942: LD_VAR 0 5
7946: PPUSH
7947: CALL 8385 0 3
7951: GO 8074
7953: LD_INT 5
7955: DOUBLE
7956: EQUAL
7957: IFTRUE 7961
7959: GO 7968
7961: POP
// HackSpawnVehicle ; 6 :
7962: CALL 8446 0 0
7966: GO 8074
7968: LD_INT 6
7970: DOUBLE
7971: EQUAL
7972: IFTRUE 7976
7974: GO 7983
7976: POP
// HackInvincible ; 7 :
7977: CALL 8992 0 0
7981: GO 8074
7983: LD_INT 7
7985: DOUBLE
7986: EQUAL
7987: IFTRUE 7991
7989: GO 7998
7991: POP
// HackInvisible ; 8 :
7992: CALL 9103 0 0
7996: GO 8074
7998: LD_INT 8
8000: DOUBLE
8001: EQUAL
8002: IFTRUE 8006
8004: GO 8013
8006: POP
// HackChangeYourSide ; 9 :
8007: CALL 9160 0 0
8011: GO 8074
8013: LD_INT 9
8015: DOUBLE
8016: EQUAL
8017: IFTRUE 8021
8019: GO 8028
8021: POP
// HackChangeUnitSide ; 10 :
8022: CALL 9202 0 0
8026: GO 8074
8028: LD_INT 10
8030: DOUBLE
8031: EQUAL
8032: IFTRUE 8036
8034: GO 8043
8036: POP
// HackFog ; 11 :
8037: CALL 9303 0 0
8041: GO 8074
8043: LD_INT 11
8045: DOUBLE
8046: EQUAL
8047: IFTRUE 8051
8049: GO 8058
8051: POP
// HackApeman ; 12 :
8052: CALL 9318 0 0
8056: GO 8074
8058: LD_INT 12
8060: DOUBLE
8061: EQUAL
8062: IFTRUE 8066
8064: GO 8073
8066: POP
// HackBoom ; end ;
8067: CALL 9403 0 0
8071: GO 8074
8073: POP
// end ;
8074: PPOPN 6
8076: END
// export function HackUnlimitedResources ; var i , j , tmp ; begin
8077: LD_INT 0
8079: PPUSH
8080: PPUSH
8081: PPUSH
8082: PPUSH
// tmp := FilterAllUnits ( [ [ f_side , your_side ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) ;
8083: LD_ADDR_VAR 0 4
8087: PUSH
8088: LD_INT 22
8090: PUSH
8091: LD_OWVAR 2
8095: PUSH
8096: EMPTY
8097: LIST
8098: LIST
8099: PUSH
8100: LD_INT 2
8102: PUSH
8103: LD_INT 30
8105: PUSH
8106: LD_INT 0
8108: PUSH
8109: EMPTY
8110: LIST
8111: LIST
8112: PUSH
8113: LD_INT 30
8115: PUSH
8116: LD_INT 1
8118: PUSH
8119: EMPTY
8120: LIST
8121: LIST
8122: PUSH
8123: EMPTY
8124: LIST
8125: LIST
8126: LIST
8127: PUSH
8128: EMPTY
8129: LIST
8130: LIST
8131: PPUSH
8132: CALL_OW 69
8136: ST_TO_ADDR
// if not tmp then
8137: LD_VAR 0 4
8141: NOT
8142: IFFALSE 8146
// exit ;
8144: GO 8205
// for i in tmp do
8146: LD_ADDR_VAR 0 2
8150: PUSH
8151: LD_VAR 0 4
8155: PUSH
8156: FOR_IN
8157: IFFALSE 8203
// for j = 1 to 3 do
8159: LD_ADDR_VAR 0 3
8163: PUSH
8164: DOUBLE
8165: LD_INT 1
8167: DEC
8168: ST_TO_ADDR
8169: LD_INT 3
8171: PUSH
8172: FOR_TO
8173: IFFALSE 8199
// SetResourceType ( GetBase ( i ) , j , 99999 ) ;
8175: LD_VAR 0 2
8179: PPUSH
8180: CALL_OW 274
8184: PPUSH
8185: LD_VAR 0 3
8189: PPUSH
8190: LD_INT 99999
8192: PPUSH
8193: CALL_OW 277
8197: GO 8172
8199: POP
8200: POP
8201: GO 8156
8203: POP
8204: POP
// end ;
8205: LD_VAR 0 1
8209: RET
// export function HackSetLevel10 ; var i , j ; begin
8210: LD_INT 0
8212: PPUSH
8213: PPUSH
8214: PPUSH
// for i in FilterAllUnits ( [ f_type , unit_human ] ) do
8215: LD_ADDR_VAR 0 2
8219: PUSH
8220: LD_INT 21
8222: PUSH
8223: LD_INT 1
8225: PUSH
8226: EMPTY
8227: LIST
8228: LIST
8229: PPUSH
8230: CALL_OW 69
8234: PUSH
8235: FOR_IN
8236: IFFALSE 8288
// if IsSelected ( i ) then
8238: LD_VAR 0 2
8242: PPUSH
8243: CALL_OW 306
8247: IFFALSE 8286
// begin for j := 1 to 4 do
8249: LD_ADDR_VAR 0 3
8253: PUSH
8254: DOUBLE
8255: LD_INT 1
8257: DEC
8258: ST_TO_ADDR
8259: LD_INT 4
8261: PUSH
8262: FOR_TO
8263: IFFALSE 8284
// SetSkill ( i , j , 10 ) ;
8265: LD_VAR 0 2
8269: PPUSH
8270: LD_VAR 0 3
8274: PPUSH
8275: LD_INT 10
8277: PPUSH
8278: CALL_OW 237
8282: GO 8262
8284: POP
8285: POP
// end ;
8286: GO 8235
8288: POP
8289: POP
// end ;
8290: LD_VAR 0 1
8294: RET
// export function HackSetLevel10YourUnits ; var i , j ; begin
8295: LD_INT 0
8297: PPUSH
8298: PPUSH
8299: PPUSH
// for i in FilterAllUnits ( [ [ f_side , your_side ] , [ f_type , unit_human ] ] ) do
8300: LD_ADDR_VAR 0 2
8304: PUSH
8305: LD_INT 22
8307: PUSH
8308: LD_OWVAR 2
8312: PUSH
8313: EMPTY
8314: LIST
8315: LIST
8316: PUSH
8317: LD_INT 21
8319: PUSH
8320: LD_INT 1
8322: PUSH
8323: EMPTY
8324: LIST
8325: LIST
8326: PUSH
8327: EMPTY
8328: LIST
8329: LIST
8330: PPUSH
8331: CALL_OW 69
8335: PUSH
8336: FOR_IN
8337: IFFALSE 8378
// begin for j := 1 to 4 do
8339: LD_ADDR_VAR 0 3
8343: PUSH
8344: DOUBLE
8345: LD_INT 1
8347: DEC
8348: ST_TO_ADDR
8349: LD_INT 4
8351: PUSH
8352: FOR_TO
8353: IFFALSE 8374
// SetSkill ( i , j , 10 ) ;
8355: LD_VAR 0 2
8359: PPUSH
8360: LD_VAR 0 3
8364: PPUSH
8365: LD_INT 10
8367: PPUSH
8368: CALL_OW 237
8372: GO 8352
8374: POP
8375: POP
// end ;
8376: GO 8336
8378: POP
8379: POP
// end ;
8380: LD_VAR 0 1
8384: RET
// export function HackSpawnHuman ( nation , class , skill ) ; begin
8385: LD_INT 0
8387: PPUSH
// uc_side := your_side ;
8388: LD_ADDR_OWVAR 20
8392: PUSH
8393: LD_OWVAR 2
8397: ST_TO_ADDR
// uc_nation := nation ;
8398: LD_ADDR_OWVAR 21
8402: PUSH
8403: LD_VAR 0 1
8407: ST_TO_ADDR
// InitHc ;
8408: CALL_OW 19
// PrepareHuman ( false , class , skill ) ;
8412: LD_INT 0
8414: PPUSH
8415: LD_VAR 0 2
8419: PPUSH
8420: LD_VAR 0 3
8424: PPUSH
8425: CALL_OW 380
// PlaceUnitAnywhere ( CreateHuman , true ) ;
8429: CALL_OW 44
8433: PPUSH
8434: LD_INT 1
8436: PPUSH
8437: CALL_OW 51
// end ;
8441: LD_VAR 0 4
8445: RET
// export function HackSpawnVehicle ; begin
8446: LD_INT 0
8448: PPUSH
// uc_side := your_side ;
8449: LD_ADDR_OWVAR 20
8453: PUSH
8454: LD_OWVAR 2
8458: ST_TO_ADDR
// uc_nation := rand ( 1 , 3 ) ;
8459: LD_ADDR_OWVAR 21
8463: PUSH
8464: LD_INT 1
8466: PPUSH
8467: LD_INT 3
8469: PPUSH
8470: CALL_OW 12
8474: ST_TO_ADDR
// InitVc ;
8475: CALL_OW 20
// case uc_nation of 1 :
8479: LD_OWVAR 21
8483: PUSH
8484: LD_INT 1
8486: DOUBLE
8487: EQUAL
8488: IFTRUE 8492
8490: GO 8636
8492: POP
// begin vc_chassis := [ us_light_wheeled , us_medium_wheeled , us_medium_tracked , us_heavy_tracked , us_morphling ] [ rand ( 1 , 5 ) ] ;
8493: LD_ADDR_OWVAR 37
8497: PUSH
8498: LD_INT 1
8500: PUSH
8501: LD_INT 2
8503: PUSH
8504: LD_INT 3
8506: PUSH
8507: LD_INT 4
8509: PUSH
8510: LD_INT 5
8512: PUSH
8513: EMPTY
8514: LIST
8515: LIST
8516: LIST
8517: LIST
8518: LIST
8519: PUSH
8520: LD_INT 1
8522: PPUSH
8523: LD_INT 5
8525: PPUSH
8526: CALL_OW 12
8530: ARRAY
8531: ST_TO_ADDR
// vc_engine := rand ( 1 , 3 ) ;
8532: LD_ADDR_OWVAR 39
8536: PUSH
8537: LD_INT 1
8539: PPUSH
8540: LD_INT 3
8542: PPUSH
8543: CALL_OW 12
8547: ST_TO_ADDR
// vc_control := [ control_manual , control_remote , control_computer ] [ rand ( 1 , 3 ) ] ;
8548: LD_ADDR_OWVAR 38
8552: PUSH
8553: LD_INT 1
8555: PUSH
8556: LD_INT 2
8558: PUSH
8559: LD_INT 3
8561: PUSH
8562: EMPTY
8563: LIST
8564: LIST
8565: LIST
8566: PUSH
8567: LD_INT 1
8569: PPUSH
8570: LD_INT 3
8572: PPUSH
8573: CALL_OW 12
8577: ARRAY
8578: ST_TO_ADDR
// vc_weapon := [ us_machine_gun , us_gatling_gun , us_double_gun , us_light_gun , us_rocket_launcher , us_siberium_rocket , us_laser , us_double_laser , us_heavy_gun ] [ rand ( 1 , 9 ) ] ;
8579: LD_ADDR_OWVAR 40
8583: PUSH
8584: LD_INT 2
8586: PUSH
8587: LD_INT 4
8589: PUSH
8590: LD_INT 5
8592: PUSH
8593: LD_INT 3
8595: PUSH
8596: LD_INT 7
8598: PUSH
8599: LD_INT 8
8601: PUSH
8602: LD_INT 9
8604: PUSH
8605: LD_INT 10
8607: PUSH
8608: LD_INT 6
8610: PUSH
8611: EMPTY
8612: LIST
8613: LIST
8614: LIST
8615: LIST
8616: LIST
8617: LIST
8618: LIST
8619: LIST
8620: LIST
8621: PUSH
8622: LD_INT 1
8624: PPUSH
8625: LD_INT 9
8627: PPUSH
8628: CALL_OW 12
8632: ARRAY
8633: ST_TO_ADDR
// end ; 2 :
8634: GO 8901
8636: LD_INT 2
8638: DOUBLE
8639: EQUAL
8640: IFTRUE 8644
8642: GO 8768
8644: POP
// begin vc_chassis := [ ar_hovercraft , ar_light_trike , ar_medium_trike , ar_half_tracked ] [ rand ( 1 , 4 ) ] ;
8645: LD_ADDR_OWVAR 37
8649: PUSH
8650: LD_INT 11
8652: PUSH
8653: LD_INT 12
8655: PUSH
8656: LD_INT 13
8658: PUSH
8659: LD_INT 14
8661: PUSH
8662: EMPTY
8663: LIST
8664: LIST
8665: LIST
8666: LIST
8667: PUSH
8668: LD_INT 1
8670: PPUSH
8671: LD_INT 4
8673: PPUSH
8674: CALL_OW 12
8678: ARRAY
8679: ST_TO_ADDR
// vc_engine := rand ( 1 , 3 ) ;
8680: LD_ADDR_OWVAR 39
8684: PUSH
8685: LD_INT 1
8687: PPUSH
8688: LD_INT 3
8690: PPUSH
8691: CALL_OW 12
8695: ST_TO_ADDR
// vc_control := [ control_manual , control_remote , control_apeman ] [ rand ( 1 , 3 ) ] ;
8696: LD_ADDR_OWVAR 38
8700: PUSH
8701: LD_INT 1
8703: PUSH
8704: LD_INT 2
8706: PUSH
8707: LD_INT 5
8709: PUSH
8710: EMPTY
8711: LIST
8712: LIST
8713: LIST
8714: PUSH
8715: LD_INT 1
8717: PPUSH
8718: LD_INT 3
8720: PPUSH
8721: CALL_OW 12
8725: ARRAY
8726: ST_TO_ADDR
// vc_weapon := [ ar_double_machine_gun , ar_flame_thrower , ar_gun , ar_rocket_launcher , ar_selfpropelled_bomb ] [ rand ( 1 , 5 ) ] ;
8727: LD_ADDR_OWVAR 40
8731: PUSH
8732: LD_INT 24
8734: PUSH
8735: LD_INT 26
8737: PUSH
8738: LD_INT 27
8740: PUSH
8741: LD_INT 28
8743: PUSH
8744: LD_INT 29
8746: PUSH
8747: EMPTY
8748: LIST
8749: LIST
8750: LIST
8751: LIST
8752: LIST
8753: PUSH
8754: LD_INT 1
8756: PPUSH
8757: LD_INT 5
8759: PPUSH
8760: CALL_OW 12
8764: ARRAY
8765: ST_TO_ADDR
// end ; 3 :
8766: GO 8901
8768: LD_INT 3
8770: DOUBLE
8771: EQUAL
8772: IFTRUE 8776
8774: GO 8900
8776: POP
// begin vc_chassis := [ ru_medium_wheeled , ru_heavy_wheeled , ru_medium_tracked , ru_heavy_tracked ] [ rand ( 1 , 4 ) ] ;
8777: LD_ADDR_OWVAR 37
8781: PUSH
8782: LD_INT 21
8784: PUSH
8785: LD_INT 23
8787: PUSH
8788: LD_INT 22
8790: PUSH
8791: LD_INT 24
8793: PUSH
8794: EMPTY
8795: LIST
8796: LIST
8797: LIST
8798: LIST
8799: PUSH
8800: LD_INT 1
8802: PPUSH
8803: LD_INT 4
8805: PPUSH
8806: CALL_OW 12
8810: ARRAY
8811: ST_TO_ADDR
// vc_engine := rand ( 1 , 3 ) ;
8812: LD_ADDR_OWVAR 39
8816: PUSH
8817: LD_INT 1
8819: PPUSH
8820: LD_INT 3
8822: PPUSH
8823: CALL_OW 12
8827: ST_TO_ADDR
// vc_control := [ control_manual , control_computer ] [ rand ( 1 , 2 ) ] ;
8828: LD_ADDR_OWVAR 38
8832: PUSH
8833: LD_INT 1
8835: PUSH
8836: LD_INT 3
8838: PUSH
8839: EMPTY
8840: LIST
8841: LIST
8842: PUSH
8843: LD_INT 1
8845: PPUSH
8846: LD_INT 2
8848: PPUSH
8849: CALL_OW 12
8853: ARRAY
8854: ST_TO_ADDR
// vc_weapon := [ ru_heavy_machine_gun , ru_gatling_gun , ru_gun , ru_heavy_gun , ru_siberium_rocket , ru_rocket ] [ rand ( 1 , 6 ) ] ;
8855: LD_ADDR_OWVAR 40
8859: PUSH
8860: LD_INT 42
8862: PUSH
8863: LD_INT 43
8865: PUSH
8866: LD_INT 44
8868: PUSH
8869: LD_INT 46
8871: PUSH
8872: LD_INT 48
8874: PUSH
8875: LD_INT 47
8877: PUSH
8878: EMPTY
8879: LIST
8880: LIST
8881: LIST
8882: LIST
8883: LIST
8884: LIST
8885: PUSH
8886: LD_INT 1
8888: PPUSH
8889: LD_INT 6
8891: PPUSH
8892: CALL_OW 12
8896: ARRAY
8897: ST_TO_ADDR
// end ; end ;
8898: GO 8901
8900: POP
// PlaceUnitAnywhere ( CreateVehicle , true ) ;
8901: CALL_OW 45
8905: PPUSH
8906: LD_INT 1
8908: PPUSH
8909: CALL_OW 51
// end ;
8913: LD_VAR 0 1
8917: RET
// export invincible ; every 1 do
8918: GO 8920
8920: DISABLE
// invincible := [ ] ;
8921: LD_ADDR_EXP 34
8925: PUSH
8926: EMPTY
8927: ST_TO_ADDR
8928: END
// every 10 do var i ;
8929: GO 8931
8931: DISABLE
8932: LD_INT 0
8934: PPUSH
// begin enable ;
8935: ENABLE
// if not invincible then
8936: LD_EXP 34
8940: NOT
8941: IFFALSE 8945
// exit ;
8943: GO 8989
// for i in invincible do
8945: LD_ADDR_VAR 0 1
8949: PUSH
8950: LD_EXP 34
8954: PUSH
8955: FOR_IN
8956: IFFALSE 8987
// if GetLives ( i ) < 1000 then
8958: LD_VAR 0 1
8962: PPUSH
8963: CALL_OW 256
8967: PUSH
8968: LD_INT 1000
8970: LESS
8971: IFFALSE 8985
// SetLives ( i , 1000 ) ;
8973: LD_VAR 0 1
8977: PPUSH
8978: LD_INT 1000
8980: PPUSH
8981: CALL_OW 234
8985: GO 8955
8987: POP
8988: POP
// end ;
8989: PPOPN 1
8991: END
// export function HackInvincible ; var i ; begin
8992: LD_INT 0
8994: PPUSH
8995: PPUSH
// for i in FilterAllUnits ( [ f_or , [ f_type , unit_human ] , [ f_type , unit_vehicle ] ] ) do
8996: LD_ADDR_VAR 0 2
9000: PUSH
9001: LD_INT 2
9003: PUSH
9004: LD_INT 21
9006: PUSH
9007: LD_INT 1
9009: PUSH
9010: EMPTY
9011: LIST
9012: LIST
9013: PUSH
9014: LD_INT 21
9016: PUSH
9017: LD_INT 2
9019: PUSH
9020: EMPTY
9021: LIST
9022: LIST
9023: PUSH
9024: EMPTY
9025: LIST
9026: LIST
9027: LIST
9028: PPUSH
9029: CALL_OW 69
9033: PUSH
9034: FOR_IN
9035: IFFALSE 9096
// if IsSelected ( i ) then
9037: LD_VAR 0 2
9041: PPUSH
9042: CALL_OW 306
9046: IFFALSE 9094
// begin if i in invincible then
9048: LD_VAR 0 2
9052: PUSH
9053: LD_EXP 34
9057: IN
9058: IFFALSE 9078
// invincible := invincible diff i else
9060: LD_ADDR_EXP 34
9064: PUSH
9065: LD_EXP 34
9069: PUSH
9070: LD_VAR 0 2
9074: DIFF
9075: ST_TO_ADDR
9076: GO 9094
// invincible := invincible union i ;
9078: LD_ADDR_EXP 34
9082: PUSH
9083: LD_EXP 34
9087: PUSH
9088: LD_VAR 0 2
9092: UNION
9093: ST_TO_ADDR
// end ;
9094: GO 9034
9096: POP
9097: POP
// end ;
9098: LD_VAR 0 1
9102: RET
// export function HackInvisible ; var i , j ; begin
9103: LD_INT 0
9105: PPUSH
9106: PPUSH
9107: PPUSH
// for i in FilterAllUnits ( [ f_type , unit_human ] ) do
9108: LD_ADDR_VAR 0 2
9112: PUSH
9113: LD_INT 21
9115: PUSH
9116: LD_INT 1
9118: PUSH
9119: EMPTY
9120: LIST
9121: LIST
9122: PPUSH
9123: CALL_OW 69
9127: PUSH
9128: FOR_IN
9129: IFFALSE 9153
// if IsSelected ( i ) then
9131: LD_VAR 0 2
9135: PPUSH
9136: CALL_OW 306
9140: IFFALSE 9151
// begin ComForceInvisible ( i ) ;
9142: LD_VAR 0 2
9146: PPUSH
9147: CALL_OW 496
// end ;
9151: GO 9128
9153: POP
9154: POP
// end ;
9155: LD_VAR 0 1
9159: RET
// export function HackChangeYourSide ; begin
9160: LD_INT 0
9162: PPUSH
// if your_side = 8 then
9163: LD_OWVAR 2
9167: PUSH
9168: LD_INT 8
9170: EQUAL
9171: IFFALSE 9183
// your_side := 0 else
9173: LD_ADDR_OWVAR 2
9177: PUSH
9178: LD_INT 0
9180: ST_TO_ADDR
9181: GO 9197
// your_side := your_side + 1 ;
9183: LD_ADDR_OWVAR 2
9187: PUSH
9188: LD_OWVAR 2
9192: PUSH
9193: LD_INT 1
9195: PLUS
9196: ST_TO_ADDR
// end ;
9197: LD_VAR 0 1
9201: RET
// export function HackChangeUnitSide ; var i , j ; begin
9202: LD_INT 0
9204: PPUSH
9205: PPUSH
9206: PPUSH
// for i in all_units do
9207: LD_ADDR_VAR 0 2
9211: PUSH
9212: LD_OWVAR 3
9216: PUSH
9217: FOR_IN
9218: IFFALSE 9296
// if IsSelected ( i ) then
9220: LD_VAR 0 2
9224: PPUSH
9225: CALL_OW 306
9229: IFFALSE 9294
// begin j := GetSide ( i ) ;
9231: LD_ADDR_VAR 0 3
9235: PUSH
9236: LD_VAR 0 2
9240: PPUSH
9241: CALL_OW 255
9245: ST_TO_ADDR
// if j = 8 then
9246: LD_VAR 0 3
9250: PUSH
9251: LD_INT 8
9253: EQUAL
9254: IFFALSE 9266
// j := 0 else
9256: LD_ADDR_VAR 0 3
9260: PUSH
9261: LD_INT 0
9263: ST_TO_ADDR
9264: GO 9280
// j := j + 1 ;
9266: LD_ADDR_VAR 0 3
9270: PUSH
9271: LD_VAR 0 3
9275: PUSH
9276: LD_INT 1
9278: PLUS
9279: ST_TO_ADDR
// SetSide ( i , j ) ;
9280: LD_VAR 0 2
9284: PPUSH
9285: LD_VAR 0 3
9289: PPUSH
9290: CALL_OW 235
// end ;
9294: GO 9217
9296: POP
9297: POP
// end ;
9298: LD_VAR 0 1
9302: RET
// export function HackFog ; begin
9303: LD_INT 0
9305: PPUSH
// FogOff ( true ) ;
9306: LD_INT 1
9308: PPUSH
9309: CALL_OW 344
// end ;
9313: LD_VAR 0 1
9317: RET
// export function HackApeman ; begin
9318: LD_INT 0
9320: PPUSH
// uc_side := your_side ;
9321: LD_ADDR_OWVAR 20
9325: PUSH
9326: LD_OWVAR 2
9330: ST_TO_ADDR
// uc_nation := 0 ;
9331: LD_ADDR_OWVAR 21
9335: PUSH
9336: LD_INT 0
9338: ST_TO_ADDR
// hc_name :=  ;
9339: LD_ADDR_OWVAR 26
9343: PUSH
9344: LD_STRING 
9346: ST_TO_ADDR
// hc_gallery :=  ;
9347: LD_ADDR_OWVAR 33
9351: PUSH
9352: LD_STRING 
9354: ST_TO_ADDR
// hc_skills := [ 0 , 0 , 0 , 0 ] ;
9355: LD_ADDR_OWVAR 31
9359: PUSH
9360: LD_INT 0
9362: PUSH
9363: LD_INT 0
9365: PUSH
9366: LD_INT 0
9368: PUSH
9369: LD_INT 0
9371: PUSH
9372: EMPTY
9373: LIST
9374: LIST
9375: LIST
9376: LIST
9377: ST_TO_ADDR
// hc_class := class_apeman ;
9378: LD_ADDR_OWVAR 28
9382: PUSH
9383: LD_INT 12
9385: ST_TO_ADDR
// PlaceUnitAnywhere ( CreateHuman , true ) ;
9386: CALL_OW 44
9390: PPUSH
9391: LD_INT 1
9393: PPUSH
9394: CALL_OW 51
// end ;
9398: LD_VAR 0 1
9402: RET
// export function HackBoom ; begin
9403: LD_INT 0
9405: PPUSH
// uc_side := your_side ;
9406: LD_ADDR_OWVAR 20
9410: PUSH
9411: LD_OWVAR 2
9415: ST_TO_ADDR
// uc_nation := 1 ;
9416: LD_ADDR_OWVAR 21
9420: PUSH
9421: LD_INT 1
9423: ST_TO_ADDR
// vc_chassis := us_morphling ;
9424: LD_ADDR_OWVAR 37
9428: PUSH
9429: LD_INT 5
9431: ST_TO_ADDR
// vc_engine := engine_siberite ;
9432: LD_ADDR_OWVAR 39
9436: PUSH
9437: LD_INT 3
9439: ST_TO_ADDR
// vc_control := control_computer ;
9440: LD_ADDR_OWVAR 38
9444: PUSH
9445: LD_INT 3
9447: ST_TO_ADDR
// vc_weapon := us_siberium_rocket ;
9448: LD_ADDR_OWVAR 40
9452: PUSH
9453: LD_INT 8
9455: ST_TO_ADDR
// PlaceUnitAnywhere ( CreateVehicle , true ) ;
9456: CALL_OW 45
9460: PPUSH
9461: LD_INT 1
9463: PPUSH
9464: CALL_OW 51
// end ;
9468: LD_VAR 0 1
9472: RET
