// export sci , sup1 , sup2 , sol ; export lab , dep1 , dep2 ; export g1 , g2 , g3 ; function prepare_units ; var i ; begin
   0: LD_INT 0
   2: PPUSH
   3: PPUSH
// lab := 6 ;
   4: LD_ADDR_EXP 5
   8: PUSH
   9: LD_INT 6
  11: ST_TO_ADDR
// dep1 := 3 ;
  12: LD_ADDR_EXP 6
  16: PUSH
  17: LD_INT 3
  19: ST_TO_ADDR
// dep2 := 1 ;
  20: LD_ADDR_EXP 7
  24: PUSH
  25: LD_INT 1
  27: ST_TO_ADDR
// sci := FilterUnitsInArea ( 1 , [ f_type , unit_human ] ) ;
  28: LD_ADDR_EXP 1
  32: PUSH
  33: LD_INT 1
  35: PPUSH
  36: LD_INT 21
  38: PUSH
  39: LD_INT 1
  41: PUSH
  42: EMPTY
  43: LIST
  44: LIST
  45: PPUSH
  46: CALL_OW 70
  50: ST_TO_ADDR
// sup1 := FilterUnitsInArea ( 2 , [ f_type , unit_human ] ) ;
  51: LD_ADDR_EXP 2
  55: PUSH
  56: LD_INT 2
  58: PPUSH
  59: LD_INT 21
  61: PUSH
  62: LD_INT 1
  64: PUSH
  65: EMPTY
  66: LIST
  67: LIST
  68: PPUSH
  69: CALL_OW 70
  73: ST_TO_ADDR
// sup2 := FilterUnitsInArea ( 3 , [ f_type , unit_human ] ) ;
  74: LD_ADDR_EXP 3
  78: PUSH
  79: LD_INT 3
  81: PPUSH
  82: LD_INT 21
  84: PUSH
  85: LD_INT 1
  87: PUSH
  88: EMPTY
  89: LIST
  90: LIST
  91: PPUSH
  92: CALL_OW 70
  96: ST_TO_ADDR
// sol := FilterUnitsInArea ( 4 , [ f_type , unit_human ] ) ;
  97: LD_ADDR_EXP 4
 101: PUSH
 102: LD_INT 4
 104: PPUSH
 105: LD_INT 21
 107: PUSH
 108: LD_INT 1
 110: PUSH
 111: EMPTY
 112: LIST
 113: LIST
 114: PPUSH
 115: CALL_OW 70
 119: ST_TO_ADDR
// g1 := FilterUnitsInArea ( 5 , [ f_type , unit_human ] ) ;
 120: LD_ADDR_EXP 8
 124: PUSH
 125: LD_INT 5
 127: PPUSH
 128: LD_INT 21
 130: PUSH
 131: LD_INT 1
 133: PUSH
 134: EMPTY
 135: LIST
 136: LIST
 137: PPUSH
 138: CALL_OW 70
 142: ST_TO_ADDR
// g2 := FilterUnitsInArea ( 6 , [ f_type , unit_human ] ) ;
 143: LD_ADDR_EXP 9
 147: PUSH
 148: LD_INT 6
 150: PPUSH
 151: LD_INT 21
 153: PUSH
 154: LD_INT 1
 156: PUSH
 157: EMPTY
 158: LIST
 159: LIST
 160: PPUSH
 161: CALL_OW 70
 165: ST_TO_ADDR
// g3 := FilterUnitsInArea ( 7 , [ f_type , unit_human ] ) ;
 166: LD_ADDR_EXP 10
 170: PUSH
 171: LD_INT 7
 173: PPUSH
 174: LD_INT 21
 176: PUSH
 177: LD_INT 1
 179: PUSH
 180: EMPTY
 181: LIST
 182: LIST
 183: PPUSH
 184: CALL_OW 70
 188: ST_TO_ADDR
// for i in g1 ^ g2 ^ g3 do
 189: LD_ADDR_VAR 0 2
 193: PUSH
 194: LD_EXP 8
 198: PUSH
 199: LD_EXP 9
 203: ADD
 204: PUSH
 205: LD_EXP 10
 209: ADD
 210: PUSH
 211: FOR_IN
 212: IFFALSE 231
// SetSkill ( i , skill_combat , 6 ) ;
 214: LD_VAR 0 2
 218: PPUSH
 219: LD_INT 1
 221: PPUSH
 222: LD_INT 6
 224: PPUSH
 225: CALL_OW 237
 229: GO 211
 231: POP
 232: POP
// SetSkill ( Heike , skill_combat , 3 ) ;
 233: LD_INT 64
 235: PPUSH
 236: LD_INT 1
 238: PPUSH
 239: LD_INT 3
 241: PPUSH
 242: CALL_OW 237
// end ;
 246: LD_VAR 0 1
 250: RET
// starting begin ingame_video := true ;
 251: LD_ADDR_OWVAR 52
 255: PUSH
 256: LD_INT 1
 258: ST_TO_ADDR
// stop_talking := true ;
 259: LD_ADDR_OWVAR 56
 263: PUSH
 264: LD_INT 1
 266: ST_TO_ADDR
// prepare_units ;
 267: CALL 0 0 0
// SetAttitude ( 1 , 2 , att_neutral , true ) ;
 271: LD_INT 1
 273: PPUSH
 274: LD_INT 2
 276: PPUSH
 277: LD_INT 0
 279: PPUSH
 280: LD_INT 1
 282: PPUSH
 283: CALL_OW 80
// ComMoveUnit ( sci , lab ) ;
 287: LD_EXP 1
 291: PPUSH
 292: LD_EXP 5
 296: PPUSH
 297: CALL_OW 112
// ComMoveUnit ( sup1 , dep1 ) ;
 301: LD_EXP 2
 305: PPUSH
 306: LD_EXP 6
 310: PPUSH
 311: CALL_OW 112
// ComMoveUnit ( sup2 , dep2 ) ;
 315: LD_EXP 3
 319: PPUSH
 320: LD_EXP 7
 324: PPUSH
 325: CALL_OW 112
// ComMoveXY ( g1 , 23 , 5 ) ;
 329: LD_EXP 8
 333: PPUSH
 334: LD_INT 23
 336: PPUSH
 337: LD_INT 5
 339: PPUSH
 340: CALL_OW 111
// ComMoveXY ( g2 , 17 , 10 ) ;
 344: LD_EXP 9
 348: PPUSH
 349: LD_INT 17
 351: PPUSH
 352: LD_INT 10
 354: PPUSH
 355: CALL_OW 111
// ComMoveXY ( g3 , 25 , 30 ) ;
 359: LD_EXP 10
 363: PPUSH
 364: LD_INT 25
 366: PPUSH
 367: LD_INT 30
 369: PPUSH
 370: CALL_OW 111
// wait ( 0 0$8 ) ;
 374: LD_INT 280
 376: PPUSH
 377: CALL_OW 67
// say ( Comm , VelNow ) ;
 381: LD_INT 61
 383: PPUSH
 384: LD_STRING VelNow
 386: PPUSH
 387: CALL_OW 88
// ComMoveXY ( g1 , 38 , 23 ) ;
 391: LD_EXP 8
 395: PPUSH
 396: LD_INT 38
 398: PPUSH
 399: LD_INT 23
 401: PPUSH
 402: CALL_OW 111
// ComMoveXY ( g2 , 34 , 23 ) ;
 406: LD_EXP 9
 410: PPUSH
 411: LD_INT 34
 413: PPUSH
 414: LD_INT 23
 416: PPUSH
 417: CALL_OW 111
// ComMoveXY ( g3 , 32 , 26 ) ;
 421: LD_EXP 10
 425: PPUSH
 426: LD_INT 32
 428: PPUSH
 429: LD_INT 26
 431: PPUSH
 432: CALL_OW 111
// wait ( 0 0$2 ) ;
 436: LD_INT 70
 438: PPUSH
 439: CALL_OW 67
// CenterOnXY ( 38 , 24 ) ;
 443: LD_INT 38
 445: PPUSH
 446: LD_INT 24
 448: PPUSH
 449: CALL_OW 84
// stop_talking := false ;
 453: LD_ADDR_OWVAR 56
 457: PUSH
 458: LD_INT 0
 460: ST_TO_ADDR
// wait ( 0 0$1 ) ;
 461: LD_INT 35
 463: PPUSH
 464: CALL_OW 67
// SetAttitude ( 1 , 2 , att_enemy , true ) ;
 468: LD_INT 1
 470: PPUSH
 471: LD_INT 2
 473: PPUSH
 474: LD_INT 2
 476: PPUSH
 477: LD_INT 1
 479: PPUSH
 480: CALL_OW 80
// wait ( 0 0$2 ) ;
 484: LD_INT 70
 486: PPUSH
 487: CALL_OW 67
// ComMoveXY ( sci , 38 , 25 ) ;
 491: LD_EXP 1
 495: PPUSH
 496: LD_INT 38
 498: PPUSH
 499: LD_INT 25
 501: PPUSH
 502: CALL_OW 111
// ComMoveXY ( sup1 , 38 , 25 ) ;
 506: LD_EXP 2
 510: PPUSH
 511: LD_INT 38
 513: PPUSH
 514: LD_INT 25
 516: PPUSH
 517: CALL_OW 111
// ComMoveXY ( sup2 , 38 , 25 ) ;
 521: LD_EXP 3
 525: PPUSH
 526: LD_INT 38
 528: PPUSH
 529: LD_INT 25
 531: PPUSH
 532: CALL_OW 111
// ComMoveXY ( sol , 38 , 25 ) ;
 536: LD_EXP 4
 540: PPUSH
 541: LD_INT 38
 543: PPUSH
 544: LD_INT 25
 546: PPUSH
 547: CALL_OW 111
// wait ( 0 0$2 ) ;
 551: LD_INT 70
 553: PPUSH
 554: CALL_OW 67
// ComStop ( sci ^ sup1 ^ sup2 ^ sol ) ;
 558: LD_EXP 1
 562: PUSH
 563: LD_EXP 2
 567: ADD
 568: PUSH
 569: LD_EXP 3
 573: ADD
 574: PUSH
 575: LD_EXP 4
 579: ADD
 580: PPUSH
 581: CALL_OW 141
// ComMoveXY ( 29 , 45 , 18 ) ;
 585: LD_INT 29
 587: PPUSH
 588: LD_INT 45
 590: PPUSH
 591: LD_INT 18
 593: PPUSH
 594: CALL_OW 111
// end ;
 598: END
// var i ; every 0 0$0.1 trigger FilterUnitsInArea ( 8 , [ f_type , unit_human ] ) do
 599: LD_INT 8
 601: PPUSH
 602: LD_INT 21
 604: PUSH
 605: LD_INT 1
 607: PUSH
 608: EMPTY
 609: LIST
 610: LIST
 611: PPUSH
 612: CALL_OW 70
 616: IFFALSE 688
 618: GO 620
 620: DISABLE
// begin for i in FilterUnitsInArea ( 8 , [ f_type , unit_human ] ) do
 621: LD_ADDR_LOC 1
 625: PUSH
 626: LD_INT 8
 628: PPUSH
 629: LD_INT 21
 631: PUSH
 632: LD_INT 1
 634: PUSH
 635: EMPTY
 636: LIST
 637: LIST
 638: PPUSH
 639: CALL_OW 70
 643: PUSH
 644: FOR_IN
 645: IFFALSE 685
// begin RemoveUnit ( i ) ;
 647: LD_LOC 1
 651: PPUSH
 652: CALL_OW 64
// if i = 64 then
 656: LD_LOC 1
 660: PUSH
 661: LD_INT 64
 663: EQUAL
 664: IFFALSE 683
// begin wait ( 0 0$1 ) ;
 666: LD_INT 35
 668: PPUSH
 669: CALL_OW 67
// ChangeMap ( Ar1New , Ar1New ) ;
 673: LD_STRING Ar1New
 675: PPUSH
 676: LD_STRING Ar1New
 678: PPUSH
 679: CALL_OW 340
// end ; end ;
 683: GO 644
 685: POP
 686: POP
// enable ;
 687: ENABLE
// end ;
 688: END
// function somebody_alive ; var i , n ; begin
 689: LD_INT 0
 691: PPUSH
 692: PPUSH
 693: PPUSH
// n := 0 ;
 694: LD_ADDR_VAR 0 3
 698: PUSH
 699: LD_INT 0
 701: ST_TO_ADDR
// for i in FilterAllUnits ( [ [ f_type , unit_human ] , [ f_side , 1 ] ] ) do
 702: LD_ADDR_VAR 0 2
 706: PUSH
 707: LD_INT 21
 709: PUSH
 710: LD_INT 1
 712: PUSH
 713: EMPTY
 714: LIST
 715: LIST
 716: PUSH
 717: LD_INT 22
 719: PUSH
 720: LD_INT 1
 722: PUSH
 723: EMPTY
 724: LIST
 725: LIST
 726: PUSH
 727: EMPTY
 728: LIST
 729: LIST
 730: PPUSH
 731: CALL_OW 69
 735: PUSH
 736: FOR_IN
 737: IFFALSE 776
// if ( i <> 29 ) and IsOK ( i ) then
 739: LD_VAR 0 2
 743: PUSH
 744: LD_INT 29
 746: NONEQUAL
 747: PUSH
 748: LD_VAR 0 2
 752: PPUSH
 753: CALL_OW 302
 757: AND
 758: IFFALSE 774
// n := n + 1 ;
 760: LD_ADDR_VAR 0 3
 764: PUSH
 765: LD_VAR 0 3
 769: PUSH
 770: LD_INT 1
 772: PLUS
 773: ST_TO_ADDR
 774: GO 736
 776: POP
 777: POP
// result := n ;
 778: LD_ADDR_VAR 0 1
 782: PUSH
 783: LD_VAR 0 3
 787: ST_TO_ADDR
// end ;
 788: LD_VAR 0 1
 792: RET
// every 0 0$1 trigger not somebody_alive do
 793: CALL 689 0 0
 797: NOT
 798: IFFALSE 1124
 800: GO 802
 802: DISABLE
// begin wait ( 0 0$1 ) ;
 803: LD_INT 35
 805: PPUSH
 806: CALL_OW 67
// SetAttitude ( 1 , 2 , att_friend , true ) ;
 810: LD_INT 1
 812: PPUSH
 813: LD_INT 2
 815: PPUSH
 816: LD_INT 1
 818: PPUSH
 819: LD_INT 1
 821: PPUSH
 822: CALL_OW 80
// ComStop ( g1 ) ;
 826: LD_EXP 8
 830: PPUSH
 831: CALL_OW 141
// ComStop ( g2 ) ;
 835: LD_EXP 9
 839: PPUSH
 840: CALL_OW 141
// ComStop ( g3 ) ;
 844: LD_EXP 10
 848: PPUSH
 849: CALL_OW 141
// CenterOnXY ( 38 , 24 ) ;
 853: LD_INT 38
 855: PPUSH
 856: LD_INT 24
 858: PPUSH
 859: CALL_OW 84
// say ( Abdul , DBAb1 ) ;
 863: LD_INT 60
 865: PPUSH
 866: LD_STRING DBAb1
 868: PPUSH
 869: CALL_OW 88
// com_queue := 1 ;
 873: LD_ADDR_OWVAR 49
 877: PUSH
 878: LD_INT 1
 880: ST_TO_ADDR
// ComStop ( Hans ) ;
 881: LD_INT 56
 883: PPUSH
 884: CALL_OW 141
// ComStop ( Hans ) ;
 888: LD_INT 56
 890: PPUSH
 891: CALL_OW 141
// ComMoveXY ( Hans , 45 , 18 ) ;
 895: LD_INT 56
 897: PPUSH
 898: LD_INT 45
 900: PPUSH
 901: LD_INT 18
 903: PPUSH
 904: CALL_OW 111
// say ( Comm , DBVel1 ) ;
 908: LD_INT 61
 910: PPUSH
 911: LD_STRING DBVel1
 913: PPUSH
 914: CALL_OW 88
// say ( Hans , DBHs1 ) ;
 918: LD_INT 56
 920: PPUSH
 921: LD_STRING DBHs1
 923: PPUSH
 924: CALL_OW 88
// wait ( 0 0$1 ) ;
 928: LD_INT 35
 930: PPUSH
 931: CALL_OW 67
// ComStop ( Farmer ) ;
 935: LD_INT 68
 937: PPUSH
 938: CALL_OW 141
// ComMoveXY ( Farmer , 45 , 18 ) ;
 942: LD_INT 68
 944: PPUSH
 945: LD_INT 45
 947: PPUSH
 948: LD_INT 18
 950: PPUSH
 951: CALL_OW 111
// say ( Comm , DBVel2 ) ;
 955: LD_INT 61
 957: PPUSH
 958: LD_STRING DBVel2
 960: PPUSH
 961: CALL_OW 88
// say ( Farmer , DBRb2 ) ;
 965: LD_INT 68
 967: PPUSH
 968: LD_STRING DBRb2
 970: PPUSH
 971: CALL_OW 88
// wait ( 0 0$1 ) ;
 975: LD_INT 35
 977: PPUSH
 978: CALL_OW 67
// ComStop ( Leif ) ;
 982: LD_INT 71
 984: PPUSH
 985: CALL_OW 141
// ComMoveXY ( Leif , 45 , 18 ) ;
 989: LD_INT 71
 991: PPUSH
 992: LD_INT 45
 994: PPUSH
 995: LD_INT 18
 997: PPUSH
 998: CALL_OW 111
// say ( Comm , DBVel3 ) ;
1002: LD_INT 61
1004: PPUSH
1005: LD_STRING DBVel3
1007: PPUSH
1008: CALL_OW 88
// say ( Leif , DBLf3 ) ;
1012: LD_INT 71
1014: PPUSH
1015: LD_STRING DBLf3
1017: PPUSH
1018: CALL_OW 88
// wait ( 0 0$1 ) ;
1022: LD_INT 35
1024: PPUSH
1025: CALL_OW 67
// ComStop ( Heike ) ;
1029: LD_INT 64
1031: PPUSH
1032: CALL_OW 141
// ComMoveXY ( Heike , 45 , 18 ) ;
1036: LD_INT 64
1038: PPUSH
1039: LD_INT 45
1041: PPUSH
1042: LD_INT 18
1044: PPUSH
1045: CALL_OW 111
// say ( Comm , DBVel4 ) ;
1049: LD_INT 61
1051: PPUSH
1052: LD_STRING DBVel4
1054: PPUSH
1055: CALL_OW 88
// say ( Heike , DBHeike ) ;
1059: LD_INT 64
1061: PPUSH
1062: LD_STRING DBHeike
1064: PPUSH
1065: CALL_OW 88
// wait ( 0 0$3 ) ;
1069: LD_INT 105
1071: PPUSH
1072: CALL_OW 67
// ComStop ( Oskar ) ;
1076: LD_INT 59
1078: PPUSH
1079: CALL_OW 141
// ComMoveXY ( Oskar , 45 , 18 ) ;
1083: LD_INT 59
1085: PPUSH
1086: LD_INT 45
1088: PPUSH
1089: LD_INT 18
1091: PPUSH
1092: CALL_OW 111
// com_queue := 0 ;
1096: LD_ADDR_OWVAR 49
1100: PUSH
1101: LD_INT 0
1103: ST_TO_ADDR
// say ( Comm , DBVel5 ) ;
1104: LD_INT 61
1106: PPUSH
1107: LD_STRING DBVel5
1109: PPUSH
1110: CALL_OW 88
// say ( Oskar , DBOsk ) ;
1114: LD_INT 59
1116: PPUSH
1117: LD_STRING DBOsk
1119: PPUSH
1120: CALL_OW 88
// end ;
1124: END
