Free Hero Mesh

Check-in [08e7014805]
Login
This is a mirror of the main repository for Free Hero Mesh. New tickets and changes will not be accepted at this mirror.
Overview
Comment:Implement crushing (similar to pieces being crushed in ZZT if they cannot be pushed).
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 08e70148057edfb8b81af4e61091673cf8f52845
User & Date: user on 2022-07-04 05:43:46
Other Links: manifest | tags
Context
2022-07-06
05:20
Several changes needed to allow coordinate input to be implemented in future (including the CLICK message and InputXY keyword). Also fixes a bug that was caused by changing MoveItem from Uint8 to Uint16. check-in: 156b0a7c35 user: user tags: trunk
2022-07-04
05:43
Implement crushing (similar to pieces being crushed in ZZT if they cannot be pushed). check-in: 08e7014805 user: user tags: trunk
2022-07-02
16:14
Implement -O switch to output private solutions on stdout. check-in: 169561bd42 user: user tags: trunk
Changes

Modified TODO from [c10bc30f0b] to [2d7748f974].

14
15
16
17
18
19
20

21
22
23
24
25
26
27
* Picture editor/loading
  * Allowing more altimages
  * Batch insert multiple dependent image lumps
* Puzzle set catalog format (using with internet; a separate program)
* Inventory/replay hybrid view
* Scrollable playfield view
  * Auto scroll option (using Player flag)

  * Manual scroll option
* Bookmarks
* Message trace menu to enable/disable
* Bugs
  * Figure out why the $SeekerCloser class doesn't seem to work properly
  * Level 232 of SUPERHRO puzzle set (the Lava shouldn't expand? why?)
  * Animation stopping unexpectedly (until a key is pushed)







>







14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
* Picture editor/loading
  * Allowing more altimages
  * Batch insert multiple dependent image lumps
* Puzzle set catalog format (using with internet; a separate program)
* Inventory/replay hybrid view
* Scrollable playfield view
  * Auto scroll option (using Player flag)
  * Configurable auto scroll option
  * Manual scroll option
* Bookmarks
* Message trace menu to enable/disable
* Bugs
  * Figure out why the $SeekerCloser class doesn't seem to work properly
  * Level 232 of SUPERHRO puzzle set (the Lava shouldn't expand? why?)
  * Animation stopping unexpectedly (until a key is pushed)
39
40
41
42
43
44
45


46
47
48
49
50
51
52
* Branching replay recording
* Slow movement displaying state between triggers
* Warning if file changed when uncommited data exists in the cache database
* Composite puzzle set format (implemented)
  * Optional hypertext help
  * Compressed class definitions (?)
* Option to auto display level titles


* Testing
  * Bizarro world
  * Connection movement (it is partially tested, already)
  * Sweep, SweepEx, HitMe
  * Overriding order of execution
* Conversion from other games
  * DOS Hero Hearts







>
>







40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
* Branching replay recording
* Slow movement displaying state between triggers
* Warning if file changed when uncommited data exists in the cache database
* Composite puzzle set format (implemented)
  * Optional hypertext help
  * Compressed class definitions (?)
* Option to auto display level titles
* Option to use a separate solution file
* Multiuser scoring within one computer system (optional capability)
* Testing
  * Bizarro world
  * Connection movement (it is partially tested, already)
  * Sweep, SweepEx, HitMe
  * Overriding order of execution
* Conversion from other games
  * DOS Hero Hearts

Modified class.c from [565233454d] to [1c13f6111e].

2136
2137
2138
2139
2140
2141
2142

2143
2144
2145
2146
2147
2148
2149
        case OP_STEALTHY: cl->oflags|=OF_STEALTHY; break;
        case OP_USERSTATE: cl->oflags|=OF_USERSTATE; break;
        case OP_BIZARRO: cl->oflags|=OF_BIZARRO; break;
        case OP_SHOVABLE: cl->shovable=0x55; break;
        case OP_USERFLAG: class_user_flag(cl); break;
        case OP_ABSTRACT: cl->cflags|=CF_GROUP; break;
        case OP_CONNECTION: cl->oflags|=OF_CONNECTION; break;

        case 0x4000 ... 0x7FFF: set_super_class(cl,ptr); ptr=2; break;
        default: ParseError("Invalid directly inside of a class definition\n");
      }
    } else if(Tokenf(TF_CLOSE)) {
      break;
    } else {
      ParseError("Invalid directly inside of a class definition\n");







>







2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
        case OP_STEALTHY: cl->oflags|=OF_STEALTHY; break;
        case OP_USERSTATE: cl->oflags|=OF_USERSTATE; break;
        case OP_BIZARRO: cl->oflags|=OF_BIZARRO; break;
        case OP_SHOVABLE: cl->shovable=0x55; break;
        case OP_USERFLAG: class_user_flag(cl); break;
        case OP_ABSTRACT: cl->cflags|=CF_GROUP; break;
        case OP_CONNECTION: cl->oflags|=OF_CONNECTION; break;
        case OP_CRUSH: cl->oflags|=OF_CRUSH; break;
        case 0x4000 ... 0x7FFF: set_super_class(cl,ptr); ptr=2; break;
        default: ParseError("Invalid directly inside of a class definition\n");
      }
    } else if(Tokenf(TF_CLOSE)) {
      break;
    } else {
      ParseError("Invalid directly inside of a class definition\n");

Modified class.doc from [854a736d64] to [5a72b72b63].

411
412
413
414
415
416
417



418
419
420
421
422
423
424
,Compatible
  Sets the Compatible flag for this class, but removes the restriction of
  some variables limited to 16-bits.

Connection
  Sets the Connection flag for this class.




(DefaultImage <list...>)
  Each entry is either a number of an image in this class, or two
  numbers in parentheses giving a range of images, or () to indicate
  that there are no default images. This specifies which images can
  be used in objects of this class which are initially present on
  the level (placed in the editor). If () is used, then this class
  is not available in the editor. If there is no (DefaultImage) block,







>
>
>







411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
,Compatible
  Sets the Compatible flag for this class, but removes the restriction of
  some variables limited to 16-bits.

Connection
  Sets the Connection flag for this class.

Crush
  Sets the Crush flag for this class.

(DefaultImage <list...>)
  Each entry is either a number of an image in this class, or two
  numbers in parentheses giving a range of images, or () to indicate
  that there are no default images. This specifies which images can
  be used in objects of this class which are initially present on
  the level (placed in the editor). If () is used, then this class
  is not available in the editor. If there is no (DefaultImage) block,
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
  dispatch block matches and it is not a key which is implicitly ignored,
  and Arg3 is both zero, then it will execute this block instead.

Player
  Set the Player flag for this class.

(Queen <code...>)
  Combines the effects of the (Rook) and (Queen) blocks.

Quiz
  If specified, the internal variables of objects of this class cannot
  normally be examined by the player. However, the player can override
  this definition at run time; you cannot rely on it. Class codes cannot
  read the value of this flag.








|







500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
  dispatch block matches and it is not a key which is implicitly ignored,
  and Arg3 is both zero, then it will execute this block instead.

Player
  Set the Player flag for this class.

(Queen <code...>)
  Combines the effects of the (Rook) and (Bishop) blocks.

Quiz
  If specified, the internal variables of objects of this class cannot
  normally be examined by the player. However, the player can override
  this definition at run time; you cannot rely on it. Class codes cannot
  read the value of this flag.

930
931
932
933
934
935
936






937
938
939
940
941
942
943
Connection : bool [c]
  If this flag is set, then moving this object by the use of the Move
  instruction will try to move an entire connected group of objects,
  instead of only one. This changes some of the behaviour and will
  cause additional messages to be sent, too. Deferred movement is not
  possible if this flag is set.







Density : int16/int32 [c]
  Determines the order that objects are stacked within each cell. When an
  object is moved or created, its Density is compared with the Density of
  the objects already present at that location, in order to insert it into
  the stack of objects there, at the top, bottom, or middle, where lesser
  numbers mean closer to the top, and greater numbers are deeper. If there
  are multiple objects of the same Density, the new one goes above others







>
>
>
>
>
>







933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
Connection : bool [c]
  If this flag is set, then moving this object by the use of the Move
  instruction will try to move an entire connected group of objects,
  instead of only one. This changes some of the behaviour and will
  cause additional messages to be sent, too. Deferred movement is not
  possible if this flag is set.

Crush : bool [c]
  If this flag is set, then objects that try to move into it will destroy
  it if it is unable to shove it out of the way. Unlike sharpness checking,
  crushing is checked after shoving instead of before. Crushing is never
  possible if warping occurs.

Density : int16/int32 [c]
  Determines the order that objects are stacked within each cell. When an
  object is moved or created, its Density is compared with the Density of
  the objects already present at that location, in order to insert it into
  the stack of objects there, at the top, bottom, or middle, where lesser
  numbers mean closer to the top, and greater numbers are deeper. If there
  are multiple objects of the same Density, the new one goes above others
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
  the saved Departed value. The Departed variable will usually be set
  automatically; see the section about variables.

DESTROY
  Received when the object is about to be destroyed. Arg3 is the reason:
  0 for the Destroy or ,Destroy instruction, 1 due to this object moving
  into something sharp, 2 due to something sharp moving into this one,
  or 3 for a conflict with CollisionLayers. The return value is false to
  allow it to be destroyed or true to keep the object.

DESTROYED
  Sent to all objects whose Departures care about objects in the location
  where an object has just been destroyed (if its VisualOnly flag isn't
  set). From is the object which has just been destroyed. Arg3 is the
  reason, as for the DESTROY message.








|
|







2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
  the saved Departed value. The Departed variable will usually be set
  automatically; see the section about variables.

DESTROY
  Received when the object is about to be destroyed. Arg3 is the reason:
  0 for the Destroy or ,Destroy instruction, 1 due to this object moving
  into something sharp, 2 due to something sharp moving into this one,
  3 for a conflict with CollisionLayers, or 4 for crushing. The return
  value is false to allow it to be destroyed or true to keep the object.

DESTROYED
  Sent to all objects whose Departures care about objects in the location
  where an object has just been destroyed (if its VisualOnly flag isn't
  set). From is the object which has just been destroyed. Arg3 is the
  reason, as for the DESTROY message.

2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490

2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516

bit0
  Do not send the HITBY message to the target object. If the moving object
  has the Connection flag, then this bit is set in Arg3, but this does not
  prevent sending the HITBY message unless the return value also has bit0.

bit1
  Do not destroy either object due to hardness/sharpness.

bit2
  Do not attempt to shove the target object.

bit3
  Abort the move attempt immediately. Do not send any more HIT or HITBY
  messages, do not check hardness/sharpness, and do nothing else either.
  This bit is also set in Arg3 if the object can't move due to Volume.

bit4
  Do not send the HITBY message to the target object or to any further
  objects at the target location.

bit5
  Do not destroy either object due to hardness/sharpness, nor should any
  further objects at the target location be destroyed due to sharpness.


bit6
  Do not attempt to shove the target object, nor attempt to shove any
  other objects at the target location. (If you are using the two pass
  HIT/HITBY for connection movement, then this bit will automatically
  be set during the first pass.)

bit7 *
  Do not attempt sliding. (This bit is always set in Arg3 if it is due
  to Connection, and always prevents sliding in this case.)

bit8
  Abort after sending the HITBY message.

bit9
  Abort after hardness/sharpness checking.

bit10
  Abort after attempting shoving.

bit11
  Set by the game engine if the move attempt has been restarted due to
  bit15 being set during the previous attempt.

bit12 *
  If the move attempt fails, pretend it was successful, even though the







|














|
|
>


















|







2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526

bit0
  Do not send the HITBY message to the target object. If the moving object
  has the Connection flag, then this bit is set in Arg3, but this does not
  prevent sending the HITBY message unless the return value also has bit0.

bit1
  Do not destroy either object due to hardness/sharpness or crushing.

bit2
  Do not attempt to shove the target object.

bit3
  Abort the move attempt immediately. Do not send any more HIT or HITBY
  messages, do not check hardness/sharpness, and do nothing else either.
  This bit is also set in Arg3 if the object can't move due to Volume.

bit4
  Do not send the HITBY message to the target object or to any further
  objects at the target location.

bit5
  Do not destroy either object due to hardness/sharpness or crushing, nor
  should any further objects at the target location be destroyed due to
  hardness/sharpness or crushing.

bit6
  Do not attempt to shove the target object, nor attempt to shove any
  other objects at the target location. (If you are using the two pass
  HIT/HITBY for connection movement, then this bit will automatically
  be set during the first pass.)

bit7 *
  Do not attempt sliding. (This bit is always set in Arg3 if it is due
  to Connection, and always prevents sliding in this case.)

bit8
  Abort after sending the HITBY message.

bit9
  Abort after hardness/sharpness checking.

bit10
  Abort after attempting shoving and crushing.

bit11
  Set by the game engine if the move attempt has been restarted due to
  bit15 being set during the previous attempt.

bit12 *
  If the move attempt fails, pretend it was successful, even though the

Modified exec.c from [cb23d27153] to [a0ee5dcd19].

1062
1063
1064
1065
1066
1067
1068



1069
1070
1071
1072
1073
1074
1075
          oE->inertia=o->inertia;
          if(move_dir(obj,objE,dir)) {
            if(!(oE->oflags&OF_DESTROYED)) o->inertia=oE->inertia;
            hit|=0x8000;
            if(hit&0x800000) goto restart;
          }
        }



        objE=obj_below(objE);
      }
      if((hit&0x48000)==0x8000) goto restart;
      if((hit&0x200000) && !(hit&0x402008)) {
        if((hit&0x20000) || oF) goto success; else goto fail;
      }
    } else {







>
>
>







1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
          oE->inertia=o->inertia;
          if(move_dir(obj,objE,dir)) {
            if(!(oE->oflags&OF_DESTROYED)) o->inertia=oE->inertia;
            hit|=0x8000;
            if(hit&0x800000) goto restart;
          }
        }
        if((oE->oflags&OF_CRUSH) && !(hit&0x22) && oE->x==o->x+x_delta[dir] && oE->y==o->y+y_delta[dir]) {
          if(!v_bool(destroy(obj,objE,4))) hit|=0x8000;
        }
        objE=obj_below(objE);
      }
      if((hit&0x48000)==0x8000) goto restart;
      if((hit&0x200000) && !(hit&0x402008)) {
        if((hit&0x20000) || oF) goto success; else goto fail;
      }
    } else {
1135
1136
1137
1138
1139
1140
1141



1142
1143
1144
1145
1146
1147
1148
      if(!(hit&0x44) && (oE->shovable&(1<<dir)) && o->inertia>=oE->weight && !(oE->oflags&OF_VISUALONLY)) {
        oE->inertia=o->inertia;
        if(move_dir(obj,objE,dir)) {
          if(!(oE->oflags&OF_DESTROYED)) o->inertia=oE->inertia;
          hit|=0x8000;
          if(hit&0x800000) goto restart;
        }



      }
      if(hit&0x400) goto fail;
      objE=obj_below(objE);
    }
    if(hit&0x2008) goto fail;
    if((hit&0x48000)==0x8000) goto restart;
    if((hit&0x200000) && !(hit&0x400000)) goto success;







>
>
>







1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
      if(!(hit&0x44) && (oE->shovable&(1<<dir)) && o->inertia>=oE->weight && !(oE->oflags&OF_VISUALONLY)) {
        oE->inertia=o->inertia;
        if(move_dir(obj,objE,dir)) {
          if(!(oE->oflags&OF_DESTROYED)) o->inertia=oE->inertia;
          hit|=0x8000;
          if(hit&0x800000) goto restart;
        }
      }
      if((oE->oflags&OF_CRUSH) && !(hit&0x22) && oE->x==o->x+x_delta[dir] && oE->y==o->y+y_delta[dir]) {
        if(!v_bool(destroy(obj,objE,4))) hit|=0x8000;
      }
      if(hit&0x400) goto fail;
      objE=obj_below(objE);
    }
    if(hit&0x2008) goto fail;
    if((hit&0x48000)==0x8000) goto restart;
    if((hit&0x200000) && !(hit&0x400000)) goto success;
1316
1317
1318
1319
1320
1321
1322



1323
1324
1325
1326
1327
1328
1329
            oE->inertia=o->inertia;
            if(move_dir(obj,objE,dir)) {
              if(!(oE->oflags&OF_DESTROYED)) o->inertia=oE->inertia;
              hit|=0x8000;
              if(hit&0x800000) goto restart;
            }
          }



        }
        objE=obj_below(objE);
      }
      if((hit&0x48000)==0x8000) goto restart;
      if((hit&0x200000) && !(hit&0x402008)) {
        if(hit&0x20000) goto success;
        if(!oF) goto fail;







>
>
>







1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
            oE->inertia=o->inertia;
            if(move_dir(obj,objE,dir)) {
              if(!(oE->oflags&OF_DESTROYED)) o->inertia=oE->inertia;
              hit|=0x8000;
              if(hit&0x800000) goto restart;
            }
          }
          if((oE->oflags&OF_CRUSH) && !(hit&0x22) && obj==objW && oE->x==o->x+x_delta[dir] && oE->y==o->y+y_delta[dir]) {
            if(!v_bool(destroy(obj,objE,4))) hit|=0x8000;
          }
        }
        objE=obj_below(objE);
      }
      if((hit&0x48000)==0x8000) goto restart;
      if((hit&0x200000) && !(hit&0x402008)) {
        if(hit&0x20000) goto success;
        if(!oF) goto fail;
1406
1407
1408
1409
1410
1411
1412



1413
1414
1415
1416
1417
1418
1419
      if(!(hit&0x44) && (oE->shovable&(1<<dir)) && o->inertia>=oE->weight && !(oE->oflags&OF_VISUALONLY)) {
        oE->inertia=o->inertia;
        if(move_dir(obj,objE,dir)) {
          if(!(oE->oflags&OF_DESTROYED)) o->inertia=oE->inertia;
          hit|=0x8000;
          if(hit&0x800000) goto restart;
        }



      }
      if(hit&0x400) goto fail;
      objE=obj_below(objE);
    }
    if(hit&0x2008) goto fail;
    if((hit&0x48000)==0x8000) goto restart;
    if((hit&0x200000) && !(hit&0x400000)) {







>
>
>







1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
      if(!(hit&0x44) && (oE->shovable&(1<<dir)) && o->inertia>=oE->weight && !(oE->oflags&OF_VISUALONLY)) {
        oE->inertia=o->inertia;
        if(move_dir(obj,objE,dir)) {
          if(!(oE->oflags&OF_DESTROYED)) o->inertia=oE->inertia;
          hit|=0x8000;
          if(hit&0x800000) goto restart;
        }
      }
      if((oE->oflags&OF_CRUSH) && !(hit&0x22) && obj==objW && oE->x==o->x+x_delta[dir] && oE->y==o->y+y_delta[dir]) {
        if(!v_bool(destroy(obj,objE,4))) hit|=0x8000;
      }
      if(hit&0x400) goto fail;
      objE=obj_below(objE);
    }
    if(hit&0x2008) goto fail;
    if((hit&0x48000)==0x8000) goto restart;
    if((hit&0x200000) && !(hit&0x400000)) {
2931
2932
2933
2934
2935
2936
2937




2938
2939
2940
2941
2942
2943
2944
    case OP_CONNECTION_E: NoIgnore(); StackReq(1,0); if(v_bool(Pop())) o->oflags|=OF_CONNECTION; else o->oflags&=~OF_CONNECTION; break;
    case OP_CONNECTION_EC: NoIgnore(); StackReq(2,0); SetFlagOf(OF_CONNECTION); break;
    case OP_CONTROL: StackReq(0,1); Push(OVALUE(control_obj)); break;
    case OP_COPYARRAY: NoIgnore(); StackReq(2,0); t2=Pop(); t1=Pop(); v_copy_array(t1,t2); break;
    case OP_COUNT: StackReq(1,2); i=v_count(); Push(NVALUE(i)); break;
    case OP_CREATE: NoIgnore(); StackReq(5,1); t5=Pop(); t4=Pop(); t3=Pop(); t2=Pop(); t1=Pop(); Push(v_create(obj,t1,t2,t3,t4,t5)); break;
    case OP_CREATE_D: NoIgnore(); StackReq(5,0); t5=Pop(); t4=Pop(); t3=Pop(); t2=Pop(); t1=Pop(); v_create(obj,t1,t2,t3,t4,t5); break;




    case OP_DATA: StackReq(2,1); t2=Pop(); t1=Pop(); v_data(t1,t2); break;
    case OP_DELINVENTORY: StackReq(2,0); t2=Pop(); t1=Pop(); v_delete_inventory(t1,t2); break;
    case OP_DELTA: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.u>t2.u?t1.u-t2.u:t2.u-t1.u)); break;
    case OP_DENSITY: StackReq(0,1); Push(NVALUE(o->density)); break;
    case OP_DENSITY_C: StackReq(1,1); Push(GetVariableOrAttributeOf(density,NVALUE)); break;
    case OP_DENSITY_E: NoIgnore(); StackReq(1,0); t1=Pop(); Numeric(t1); change_density(obj,t1.s); break;
    case OP_DENSITY_E16: NoIgnore(); StackReq(1,0); t1=Pop(); Numeric(t1); change_density(obj,t1.s&0xFFFF); break;







>
>
>
>







2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
    case OP_CONNECTION_E: NoIgnore(); StackReq(1,0); if(v_bool(Pop())) o->oflags|=OF_CONNECTION; else o->oflags&=~OF_CONNECTION; break;
    case OP_CONNECTION_EC: NoIgnore(); StackReq(2,0); SetFlagOf(OF_CONNECTION); break;
    case OP_CONTROL: StackReq(0,1); Push(OVALUE(control_obj)); break;
    case OP_COPYARRAY: NoIgnore(); StackReq(2,0); t2=Pop(); t1=Pop(); v_copy_array(t1,t2); break;
    case OP_COUNT: StackReq(1,2); i=v_count(); Push(NVALUE(i)); break;
    case OP_CREATE: NoIgnore(); StackReq(5,1); t5=Pop(); t4=Pop(); t3=Pop(); t2=Pop(); t1=Pop(); Push(v_create(obj,t1,t2,t3,t4,t5)); break;
    case OP_CREATE_D: NoIgnore(); StackReq(5,0); t5=Pop(); t4=Pop(); t3=Pop(); t2=Pop(); t1=Pop(); v_create(obj,t1,t2,t3,t4,t5); break;
    case OP_CRUSH: StackReq(0,1); if(o->oflags&OF_CRUSH) Push(NVALUE(1)); else Push(NVALUE(0)); break;
    case OP_CRUSH_C: StackReq(1,1); GetFlagOf(OF_CRUSH); break;
    case OP_CRUSH_E: NoIgnore(); StackReq(1,0); if(v_bool(Pop())) o->oflags|=OF_CRUSH; else o->oflags&=~OF_CRUSH; break;
    case OP_CRUSH_EC: NoIgnore(); StackReq(2,0); SetFlagOf(OF_CRUSH); break;
    case OP_DATA: StackReq(2,1); t2=Pop(); t1=Pop(); v_data(t1,t2); break;
    case OP_DELINVENTORY: StackReq(2,0); t2=Pop(); t1=Pop(); v_delete_inventory(t1,t2); break;
    case OP_DELTA: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.u>t2.u?t1.u-t2.u:t2.u-t1.u)); break;
    case OP_DENSITY: StackReq(0,1); Push(NVALUE(o->density)); break;
    case OP_DENSITY_C: StackReq(1,1); Push(GetVariableOrAttributeOf(density,NVALUE)); break;
    case OP_DENSITY_E: NoIgnore(); StackReq(1,0); t1=Pop(); Numeric(t1); change_density(obj,t1.s); break;
    case OP_DENSITY_E16: NoIgnore(); StackReq(1,0); t1=Pop(); Numeric(t1); change_density(obj,t1.s&0xFFFF); break;

Modified heromesh.h from [73a29c9f38] to [9d19e813de].

146
147
148
149
150
151
152

153
154
155
156
157
158
159
#define OF_KEYCLEARED 0x0100
#define OF_DESTROYED 0x0200
#define OF_BIZARRO 0x0400
#define OF_MOVED2 0x0800
#define OF_MOVING 0x1000
#define OF_ORDERED 0x2000
#define OF_CONNECTION 0x4000


typedef struct {
  const char*name;
  const char*edithelp; // not present if CF_GROUP
  const char*gamehelp; // not present if CF_GROUP
  Uint16*codes;
  Uint16*messages; // use 0xFFFF if no such message block







>







146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#define OF_KEYCLEARED 0x0100
#define OF_DESTROYED 0x0200
#define OF_BIZARRO 0x0400
#define OF_MOVED2 0x0800
#define OF_MOVING 0x1000
#define OF_ORDERED 0x2000
#define OF_CONNECTION 0x4000
#define OF_CRUSH 0x8000

typedef struct {
  const char*name;
  const char*edithelp; // not present if CF_GROUP
  const char*gamehelp; // not present if CF_GROUP
  Uint16*codes;
  Uint16*messages; // use 0xFFFF if no such message block

Modified instruc from [edac0d30f7] to [191572aaed].

186
187
188
189
190
191
192

193
194
195
196
197
198
199
,=Moving
,=Done
,=Connection
,Destroyed
,Player
,Compatible
,CollisionLayers

Self
Msg
From
=Arg1
=Arg2
=Arg3
=MoveNumber







>







186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
,=Moving
,=Done
,=Connection
,Destroyed
,Player
,Compatible
,CollisionLayers
,=Crush
Self
Msg
From
=Arg1
=Arg2
=Arg3
=MoveNumber

Modified instruc.h from [13db57267f] to [d89fb3bd28].

275
276
277
278
279
280
281




282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566

567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
#define OP_DESTROYED_C 34937
#define OP_PLAYER 32890
#define OP_PLAYER_C 34938
#define OP_COMPATIBLE 32891
#define OP_COMPATIBLE_C 34939
#define OP_COLLISIONLAYERS 32892
#define OP_COLLISIONLAYERS_C 34940




#define OP_SELF 32893
#define OP_MSG 32894
#define OP_FROM 32895
#define OP_ARG1 32896
#define OP_ARG1_E 36992
#define OP_ARG2 32897
#define OP_ARG2_E 36993
#define OP_ARG3 32898
#define OP_ARG3_E 36994
#define OP_MOVENUMBER 32899
#define OP_MOVENUMBER_E 36995
#define OP_LEVEL 32900
#define OP_KEY 32901
#define OP_FINISHED 32902
#define OP_FINISHED_E 36998
#define OP_BACKGROUND 32903
#define OP_CODEPAGE 32904
#define OP_ORDER 32905
#define OP_CONTROL 32906
#define OP_LEVELTABLE 32907
#define OP_INPUT 32908
#define OP_QUIZ 32909
#define OP_INPLACE 32910
#define OP_DEFAULTIMAGE 32911
#define OP_HELP 32912
#define OP_EDITORHELP 32913
#define OP_OTHERS 32914
#define OP_SUBS 32915
#define OP_ANIMATE 32916
#define OP_ANIMATE_E 37012
#define OP_ANIMATEDEAD 32917
#define OP_ANIMATEDEAD_E 37013
#define OP_ASSASSINATE 32918
#define OP_ASSASSINATE_C 34966
#define OP_BROADCAST 32919
#define OP_BROADCAST_D 41111
#define OP_BROADCASTAND 32920
#define OP_BROADCASTANDEX 32921
#define OP_BROADCASTCLASS 32922
#define OP_BROADCASTEX 32923
#define OP_BROADCASTEX_D 41115
#define OP_BROADCASTLIST 32924
#define OP_BROADCASTLISTEX 32925
#define OP_BROADCASTSUM 32926
#define OP_BROADCASTSUMEX 32927
#define OP_CHAIN 32928
#define OP_CHEBYSHEV 32929
#define OP_CHEBYSHEV_C 34977
#define OP_COLOC 32930
#define OP_COLOC_C 34978
#define OP_CONNECT 32931
#define OP_CONNECT_C 34979
#define OP_CREATE 32932
#define OP_CREATE_D 41124
#define OP_DATA 32933
#define OP_DELINVENTORY 32934
#define OP_DELTA 32935
#define OP_DESTROY 32936
#define OP_DESTROY_C 34984
#define OP_DESTROY_D 41128
#define OP_DESTROY_CD 43176
#define OP_FAKEMOVE 32937
#define OP_FAKEMOVE_C 34985
#define OP_FINDCONNECTION 32938
#define OP_FINDCONNECTION_C 34986
#define OP_FLUSHCLASS 32939
#define OP_FLUSHOBJ 32940
#define OP_FLUSHOBJ_C 34988
#define OP_GETINVENTORY 32941
#define OP_HEIGHTAT 32942
#define OP_HITME 32943
#define OP_IGNOREKEY 32944
#define OP_INTMOVE 32945
#define OP_INTMOVE_C 34993
#define OP_INTMOVE_D 41137
#define OP_INTMOVE_CD 43185
#define OP_JUMPTO 32946
#define OP_JUMPTO_C 34994
#define OP_JUMPTO_D 41138
#define OP_JUMPTO_CD 43186
#define OP_LOC 32947
#define OP_LOC_C 34995
#define OP_LOCATEME 32948
#define OP_LOCATEME_C 34996
#define OP_LOSELEVEL 32949
#define OP_MANHATTAN 32950
#define OP_MANHATTAN_C 34998
#define OP_MAXINVENTORY 32951
#define OP_MORTON 32952
#define OP_MORTON_C 35000
#define OP_MOVE 32953
#define OP_MOVE_C 35001
#define OP_MOVE_D 41145
#define OP_MOVE_CD 43193
#define OP_MOVEPLUS 32954
#define OP_MOVEPLUS_C 35002
#define OP_MOVEPLUS_D 41146
#define OP_MOVEPLUS_CD 43194
#define OP_MOVETO 32955
#define OP_MOVETO_C 35003
#define OP_MOVETO_D 41147
#define OP_MOVETO_CD 43195
#define OP_PLUSMOVE 32956
#define OP_PLUSMOVE_C 35004
#define OP_PLUSMOVE_D 41148
#define OP_PLUSMOVE_CD 43196
#define OP_MINUSMOVE 32957
#define OP_MINUSMOVE_C 35005
#define OP_MINUSMOVE_D 41149
#define OP_MINUSMOVE_CD 43197
#define OP_NEWX 32958
#define OP_NEWXY 32959
#define OP_NEWY 32960
#define OP_OBJABOVE 32961
#define OP_OBJABOVE_C 35009
#define OP_OBJBELOW 32962
#define OP_OBJBELOW_C 35010
#define OP_OBJBOTTOMAT 32963
#define OP_OBJCLASSAT 32964
#define OP_OBJDIR 32965
#define OP_OBJDIR_C 35013
#define OP_OBJLAYERAT 32966
#define OP_OBJMOVINGTO 32967
#define OP_OBJTOPAT 32968
#define OP_POPUP 32969
#define OP_POPUPARGS 32970
#define OP_REL 32971
#define OP_REL_C 35019
#define OP_SEEK 32972
#define OP_SEEK_C 35020
#define OP_SEND 32973
#define OP_SEND_C 35021
#define OP_SEND_D 41165
#define OP_SEND_CD 43213
#define OP_SENDEX 32974
#define OP_SENDEX_C 35022
#define OP_SENDEX_D 41166
#define OP_SENDEX_CD 43214
#define OP_SETINVENTORY 32975
#define OP_SOUND 32976
#define OP_SWEEP 32977
#define OP_SWEEPEX 32978
#define OP_SYNCHRONIZE 32979
#define OP_TARGET 32980
#define OP_TARGET_C 35028
#define OP_TRACE 32981
#define OP_TRACESTACK 32982
#define OP_TRACESTACK_C 35030
#define OP_TRIGGER 32983
#define OP_TRIGGERAT 32984
#define OP_VOLUMEAT 32985
#define OP_WALKABLE 32986
#define OP_WALKABLE_C 35034
#define OP_WINLEVEL 32987
#define OP_WINLEVEL_C 35035
#define OP_XDIR 32988
#define OP_XDIR_C 35036
#define OP_XSTEP 32989
#define OP_XSTEP_C 35037
#define OP_XYDIR 32990
#define OP_YDIR 32991
#define OP_YDIR_C 35039
#define OP_YSTEP 32992
#define OP_YSTEP_C 35040
#define OP_MARK 32993
#define OP_TMARK 32994
#define OP_IN 32995
#define OP_NIN 32996
#define OP_MBEGIN 32997
#define OP_FLIP 32998
#define OP_COUNT 32999
#define OP_CLEAR 33000
#define OP_UNIQ 33001
#define OP_ARRAY 33002
#define OP_GETARRAY 33003
#define OP_GETARRAY_C 35051
#define OP_INITARRAY 33004
#define OP_SETARRAY 33005
#define OP_SETARRAY_C 35053
#define OP_ARRAYCELL 33006
#define OP_ARRAYCELL_C 35054
#define OP_ARRAYSLICE 33007
#define OP_COPYARRAY 33008
#define OP_DOTPRODUCT 33009
#define OP_PATTERN 33010
#define OP_PATTERN_C 35058
#define OP_PATTERN_E 37106
#define OP_PATTERN_EC 39154
#define OP_PATTERNS 33011
#define OP_PATTERNS_C 35059
#define OP_PATTERNS_E 37107
#define OP_PATTERNS_EC 39155
#define OP_ROOK 33012
#define OP_BISHOP 33013
#define OP_QUEEN 33014
#define OP_CUT 33015
#define OP_BIZARRO 33016
#define OP_BIZARRO_C 35064
#define OP_BIZARRO_E 37112
#define OP_BIZARRO_EC 39160
#define OP_BIZARROSWAP 33017
#define OP_BIZARROSWAP_D 41209
#define OP_SWAPWORLD 33018
#define OP_ABSTRACT 33019
#define OP_SUPER 33020
#define OP_SUPER_C 35068
#define OP_FUNCTION 33021
#define OP_LOCAL 33022
#define OP_LABEL 33023
#define OP_STRING 33024
#define OP_INT16 33025
#define OP_INT32 33026
#define OP_DISPATCH 33027
#define OP_USERFLAG 33028
#ifdef HEROMESH_CLASS
static const Op_Names op_names[]={
{"*",8486943},
{"+",8421405},
{"+Move",10584252},
{"-",8421406},
{"-Move",10584253},
{"-rot",8421382},
{".",10518528},
{"/",8486944},
{"ANHH",8389394},
{"ARRIVED",8389124},
{"Abstract",8683771},
{"Animate",8552596},
{"AnimateDead",8552597},
{"Arg1",8552576},
{"Arg2",8552577},
{"Arg3",8552578},
{"Array",8683754},
{"ArrayCell",8487150},
{"ArraySlice",8421615},
{"Arrivals",8618092},
{"Arrived",8618090},
{"Assassinate",8487062},
{"B",9437196},
{"BANG",8389380},
{"BEDOINGNG",8389406},
{"BEEDEEP",8389404},
{"BEGIN_TURN",8389123},
{"BLOCKED",8389144},
{"BOOOM",8389410},
{"BOUNCE",8389415},
{"BRRREEET",8389396},
{"BRRRT",8389395},
{"BUZZER",8389420},
{"BWEEP",8389397},
{"Background",8683655},
{"Bishop",8683765},
{"Bizarro",8618232},
{"BizarroSwap",10518777},
{"Broadcast",10518679},
{"BroadcastAnd",8421528},
{"BroadcastAndEx",8421529},
{"BroadcastEx",10518683},
{"BroadcastList",8421532},
{"BroadcastListEx",8421533},
{"BroadcastSum",8421534},
{"BroadcastSumEx",8421535},
{"Busy",8618094},
{"CHEEP",8389393},
{"CHYEW",8389392},
{"CLICK",8389388},
{"COLLIDE",8389142},
{"COLLIDEBY",8389141},
{"COLLIDING",8389143},
{"CONFLICT",8389140},
{"CONNECT",8389145},
{"CREATE",8389121},
{"CREATED",8389137},
{"Chebyshev",8487073},
{"Class",8486976},
{"Climb",9142356},
{"CodePage",8683656},
{"CollisionLayers",8487036},
{"Coloc",8487074},
{"Compatible",8487035},
{"Connect",8487075},
{"Connection",8618104},
{"Control",8421514},
{"CopyArray",8421616},
{"Create",10518692},

{"DEEP_POP",8389417},
{"DEPARTED",8389125},
{"DESTROY",8389122},
{"DESTROYED",8389136},
{"DINK",8389390},
{"DOOR",8389378},
{"DRLRLRINK",8389398},
{"DYUPE",8389413},
{"Data",8421541},
{"DefaultImage",8683663},
{"DelInventory",8421542},
{"Delta",8421543},
{"Density",9142348},
{"Departed",8618091},
{"Departures",8618093},
{"Destroy",10584232},
{"Destroyed",8487033},
{"Dir",8618054},
{"Distance",9142346},
{"Done",8618103},
{"DotProduct",8421617},
{"E",9437184},
{"END_TURN",8389139},
{"EditorHelp",8683665},
{"F",9437192},
{"FAROUT",8389421},
{"FFFFTT",8389399},
{"FLOATED",8389132},
{"FROG",8389383},
{"FakeMove",8487081},
{"FindConnection",8487082},
{"Finished",8552582},
{"FlushClass",8421547},
{"FlushObj",8487084},
{"From",8421503},
{"GLASS",8389379},
{"GLISSANT",8389419},
{"GetArray",8487147},
{"GetInventory",8421549},
{"HAWK",8389425},
{"HEARTBEAT",8389407},
{"HIT",8389134},
{"HITBY",8389135},
{"Hard",8618072},
{"Height",9142354},
{"HeightAt",8421550},
{"Help",8683664},
{"HitMe",8421551},
{"INIT",8389120},
{"IgnoreKey",8421552},
{"Image",8618055},
{"InPlace",8683662},
{"Inertia",9142344},
{"InitArray",8421612},
{"Input",8683660},
{"IntMove",10584241},
{"Invisible",8618095},
{"JAYAYAYNG",8389416},
{"JUMPED",8389128},
{"JumpTo",10584242},
{"KEWEL",8389422},
{"KEY",8389129},
{"KLECK",8389387},
{"KLINKK",8389385},
{"Key",8421509},
{"KeyCleared",8618096},
{"L",9437194},
{"LASTIMAGE",8389126},
{"LB",9437195},
{"LF",9437193},
{"LOCK",8389408},
{"LOOP",8388610},
{"Level",8421508},
{"LevelTable",8683659},
{"Loc",8487091},
{"LocateMe",8487092},
{"LoseLevel",8421557},
{"MOVED",8389127},
{"MOVING",8389130},
{"Manhattan",8487094},
{"MaxInventory",8421559},
{"Misc1",9142364},
{"Misc2",9142366},
{"Misc3",9142368},
{"Misc4",9142370},
{"Misc5",9142372},
{"Misc6",9142374},
{"Misc7",9142376},
{"Morton",8487096},
{"Move",10584249},
{"Move+",10584250},
{"MoveNumber",8552579},
{"MoveTo",10584251},
{"Moved",8618101},
{"Moving",8618102},
{"Msg",8421502},
{"N",9437186},
{"NE",9437185},
{"NEXTWARP",8389146},
{"NW",9437187},
{"NewX",8421566},
{"NewXY",8421567},
{"NewY",8421568},
{"OLDPHONE",8389402},
{"ONCE",8388609},
{"OSC",8388616},
{"OSCLOOP",8388618},
{"ObjAbove",8487105},
{"ObjBelow",8487106},
{"ObjBottomAt",8421571},
{"ObjClassAt",8421572},
{"ObjDir",8487109},
{"ObjLayerAt",8421574},
{"ObjMovingTo",8421575},
{"ObjTopAt",8421576},
{"Order",8683657},
{"Others",8683666},
{"P",8880370},
{"P*",8880371},
{"PLAYERMOVING",8389133},
{"POSTINIT",8389138},
{"POUR",8389377},
{"POWER",8389386},
{"Player",8487034},
{"PopUp",8421577},
{"Queen",8683766},
{"Quiz",8683661},
{"R",9437198},
{"RATCHET1",8389418},
{"RATCHET2",8389412},
{"RATTLE",8389403},
{"RB",9437197},
{"RF",9437199},
{"Rel",8487115},
{"Rook",8683764},
{"S",9437190},
{"SE",9437191},
{"SMALL_POP",8389389},
{"SPLASH",8389376},
{"STEAM",8389424},
{"STOP",8388608},
{"SUBS",8683667},
{"SUNK",8389131},
{"SW",9437189},
{"Seek",8487116},
{"Self",8421501},
{"Send",10584269},
{"SendEx",10584270},
{"SetArray",8487149},
{"SetInventory",8421583},
{"Shape",8618051},
{"ShapeDir",8618074},
{"Sharp",8618073},
{"Shovable",8618075},
{"Sound",8421584},
{"Stealthy",8618100},
{"Strength",9142358},
{"Super",8487164},
{"SwapWorld",8421626},
{"Sweep",8421585},
{"SweepEx",8421586},
{"Synchronize",8421587},
{"TAHTASHH",8389409},
{"THMP_thmp",8389405},
{"THWIT",8389384},
{"TICK",8389391},
{"Target",8487124},
{"Temperature",9142337},
{"Trace",8421589},
{"TraceStack",8487126},
{"Trigger",8421591},
{"TriggerAt",8421592},
{"UH_OH",8389382},
{"UNCORK",8389414},
{"UNHH",8389381},
{"UserSignal",8618097},
{"UserState",8618098},
{"VACUUM",8389411},
{"VisualOnly",8618099},
{"Volume",9142350},
{"VolumeAt",8421593},
{"W",9437188},
{"WAHOO",8389400},
{"WHACK",8389423},
{"Walkable",8487130},
{"Weight",9142352},
{"WinLevel",8487131},
{"XDir",8487132},
{"XStep",8487133},
{"XYDir",8421598},
{"Xloc",8486980},
{"YDir",8487135},
{"YEEHAW",8389401},
{"YStep",8487136},
{"Yloc",8486981},
{"_",8421601},
{"a?",8421439},
{"again",8683533},
{"and",8683544},
{"band",8421415},
{"begin",8683532},
{"bit",8683563},
{"bit0",8388609},







>
>
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|




|

|





|
|
|
|
|
|
|
|
|


|












|
|
|
|
|
|
|
|
|
|
|
|











|


|

|

|

|
|
|
>








|
|
|
|



|




|


|





|
|
|
|
|
|


|
|






|
|
|

|

|

|
|
|



|




|







|
|
|
|
|


|
|







|
|
|
|
|


|




|
|
|




|
|
|
|
|
|
|
|
|
|
|
|





|
|
|






|
|






|


|
|
|
|
|
|




|


|
|
|
|
|




|

|
|
|
|








|



|

|
|
|
|

|

|

|







275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
#define OP_DESTROYED_C 34937
#define OP_PLAYER 32890
#define OP_PLAYER_C 34938
#define OP_COMPATIBLE 32891
#define OP_COMPATIBLE_C 34939
#define OP_COLLISIONLAYERS 32892
#define OP_COLLISIONLAYERS_C 34940
#define OP_CRUSH 32893
#define OP_CRUSH_C 34941
#define OP_CRUSH_E 36989
#define OP_CRUSH_EC 39037
#define OP_SELF 32894
#define OP_MSG 32895
#define OP_FROM 32896
#define OP_ARG1 32897
#define OP_ARG1_E 36993
#define OP_ARG2 32898
#define OP_ARG2_E 36994
#define OP_ARG3 32899
#define OP_ARG3_E 36995
#define OP_MOVENUMBER 32900
#define OP_MOVENUMBER_E 36996
#define OP_LEVEL 32901
#define OP_KEY 32902
#define OP_FINISHED 32903
#define OP_FINISHED_E 36999
#define OP_BACKGROUND 32904
#define OP_CODEPAGE 32905
#define OP_ORDER 32906
#define OP_CONTROL 32907
#define OP_LEVELTABLE 32908
#define OP_INPUT 32909
#define OP_QUIZ 32910
#define OP_INPLACE 32911
#define OP_DEFAULTIMAGE 32912
#define OP_HELP 32913
#define OP_EDITORHELP 32914
#define OP_OTHERS 32915
#define OP_SUBS 32916
#define OP_ANIMATE 32917
#define OP_ANIMATE_E 37013
#define OP_ANIMATEDEAD 32918
#define OP_ANIMATEDEAD_E 37014
#define OP_ASSASSINATE 32919
#define OP_ASSASSINATE_C 34967
#define OP_BROADCAST 32920
#define OP_BROADCAST_D 41112
#define OP_BROADCASTAND 32921
#define OP_BROADCASTANDEX 32922
#define OP_BROADCASTCLASS 32923
#define OP_BROADCASTEX 32924
#define OP_BROADCASTEX_D 41116
#define OP_BROADCASTLIST 32925
#define OP_BROADCASTLISTEX 32926
#define OP_BROADCASTSUM 32927
#define OP_BROADCASTSUMEX 32928
#define OP_CHAIN 32929
#define OP_CHEBYSHEV 32930
#define OP_CHEBYSHEV_C 34978
#define OP_COLOC 32931
#define OP_COLOC_C 34979
#define OP_CONNECT 32932
#define OP_CONNECT_C 34980
#define OP_CREATE 32933
#define OP_CREATE_D 41125
#define OP_DATA 32934
#define OP_DELINVENTORY 32935
#define OP_DELTA 32936
#define OP_DESTROY 32937
#define OP_DESTROY_C 34985
#define OP_DESTROY_D 41129
#define OP_DESTROY_CD 43177
#define OP_FAKEMOVE 32938
#define OP_FAKEMOVE_C 34986
#define OP_FINDCONNECTION 32939
#define OP_FINDCONNECTION_C 34987
#define OP_FLUSHCLASS 32940
#define OP_FLUSHOBJ 32941
#define OP_FLUSHOBJ_C 34989
#define OP_GETINVENTORY 32942
#define OP_HEIGHTAT 32943
#define OP_HITME 32944
#define OP_IGNOREKEY 32945
#define OP_INTMOVE 32946
#define OP_INTMOVE_C 34994
#define OP_INTMOVE_D 41138
#define OP_INTMOVE_CD 43186
#define OP_JUMPTO 32947
#define OP_JUMPTO_C 34995
#define OP_JUMPTO_D 41139
#define OP_JUMPTO_CD 43187
#define OP_LOC 32948
#define OP_LOC_C 34996
#define OP_LOCATEME 32949
#define OP_LOCATEME_C 34997
#define OP_LOSELEVEL 32950
#define OP_MANHATTAN 32951
#define OP_MANHATTAN_C 34999
#define OP_MAXINVENTORY 32952
#define OP_MORTON 32953
#define OP_MORTON_C 35001
#define OP_MOVE 32954
#define OP_MOVE_C 35002
#define OP_MOVE_D 41146
#define OP_MOVE_CD 43194
#define OP_MOVEPLUS 32955
#define OP_MOVEPLUS_C 35003
#define OP_MOVEPLUS_D 41147
#define OP_MOVEPLUS_CD 43195
#define OP_MOVETO 32956
#define OP_MOVETO_C 35004
#define OP_MOVETO_D 41148
#define OP_MOVETO_CD 43196
#define OP_PLUSMOVE 32957
#define OP_PLUSMOVE_C 35005
#define OP_PLUSMOVE_D 41149
#define OP_PLUSMOVE_CD 43197
#define OP_MINUSMOVE 32958
#define OP_MINUSMOVE_C 35006
#define OP_MINUSMOVE_D 41150
#define OP_MINUSMOVE_CD 43198
#define OP_NEWX 32959
#define OP_NEWXY 32960
#define OP_NEWY 32961
#define OP_OBJABOVE 32962
#define OP_OBJABOVE_C 35010
#define OP_OBJBELOW 32963
#define OP_OBJBELOW_C 35011
#define OP_OBJBOTTOMAT 32964
#define OP_OBJCLASSAT 32965
#define OP_OBJDIR 32966
#define OP_OBJDIR_C 35014
#define OP_OBJLAYERAT 32967
#define OP_OBJMOVINGTO 32968
#define OP_OBJTOPAT 32969
#define OP_POPUP 32970
#define OP_POPUPARGS 32971
#define OP_REL 32972
#define OP_REL_C 35020
#define OP_SEEK 32973
#define OP_SEEK_C 35021
#define OP_SEND 32974
#define OP_SEND_C 35022
#define OP_SEND_D 41166
#define OP_SEND_CD 43214
#define OP_SENDEX 32975
#define OP_SENDEX_C 35023
#define OP_SENDEX_D 41167
#define OP_SENDEX_CD 43215
#define OP_SETINVENTORY 32976
#define OP_SOUND 32977
#define OP_SWEEP 32978
#define OP_SWEEPEX 32979
#define OP_SYNCHRONIZE 32980
#define OP_TARGET 32981
#define OP_TARGET_C 35029
#define OP_TRACE 32982
#define OP_TRACESTACK 32983
#define OP_TRACESTACK_C 35031
#define OP_TRIGGER 32984
#define OP_TRIGGERAT 32985
#define OP_VOLUMEAT 32986
#define OP_WALKABLE 32987
#define OP_WALKABLE_C 35035
#define OP_WINLEVEL 32988
#define OP_WINLEVEL_C 35036
#define OP_XDIR 32989
#define OP_XDIR_C 35037
#define OP_XSTEP 32990
#define OP_XSTEP_C 35038
#define OP_XYDIR 32991
#define OP_YDIR 32992
#define OP_YDIR_C 35040
#define OP_YSTEP 32993
#define OP_YSTEP_C 35041
#define OP_MARK 32994
#define OP_TMARK 32995
#define OP_IN 32996
#define OP_NIN 32997
#define OP_MBEGIN 32998
#define OP_FLIP 32999
#define OP_COUNT 33000
#define OP_CLEAR 33001
#define OP_UNIQ 33002
#define OP_ARRAY 33003
#define OP_GETARRAY 33004
#define OP_GETARRAY_C 35052
#define OP_INITARRAY 33005
#define OP_SETARRAY 33006
#define OP_SETARRAY_C 35054
#define OP_ARRAYCELL 33007
#define OP_ARRAYCELL_C 35055
#define OP_ARRAYSLICE 33008
#define OP_COPYARRAY 33009
#define OP_DOTPRODUCT 33010
#define OP_PATTERN 33011
#define OP_PATTERN_C 35059
#define OP_PATTERN_E 37107
#define OP_PATTERN_EC 39155
#define OP_PATTERNS 33012
#define OP_PATTERNS_C 35060
#define OP_PATTERNS_E 37108
#define OP_PATTERNS_EC 39156
#define OP_ROOK 33013
#define OP_BISHOP 33014
#define OP_QUEEN 33015
#define OP_CUT 33016
#define OP_BIZARRO 33017
#define OP_BIZARRO_C 35065
#define OP_BIZARRO_E 37113
#define OP_BIZARRO_EC 39161
#define OP_BIZARROSWAP 33018
#define OP_BIZARROSWAP_D 41210
#define OP_SWAPWORLD 33019
#define OP_ABSTRACT 33020
#define OP_SUPER 33021
#define OP_SUPER_C 35069
#define OP_FUNCTION 33022
#define OP_LOCAL 33023
#define OP_LABEL 33024
#define OP_STRING 33025
#define OP_INT16 33026
#define OP_INT32 33027
#define OP_DISPATCH 33028
#define OP_USERFLAG 33029
#ifdef HEROMESH_CLASS
static const Op_Names op_names[]={
{"*",8486943},
{"+",8421405},
{"+Move",10584253},
{"-",8421406},
{"-Move",10584254},
{"-rot",8421382},
{".",10518528},
{"/",8486944},
{"ANHH",8389394},
{"ARRIVED",8389124},
{"Abstract",8683772},
{"Animate",8552597},
{"AnimateDead",8552598},
{"Arg1",8552577},
{"Arg2",8552578},
{"Arg3",8552579},
{"Array",8683755},
{"ArrayCell",8487151},
{"ArraySlice",8421616},
{"Arrivals",8618092},
{"Arrived",8618090},
{"Assassinate",8487063},
{"B",9437196},
{"BANG",8389380},
{"BEDOINGNG",8389406},
{"BEEDEEP",8389404},
{"BEGIN_TURN",8389123},
{"BLOCKED",8389144},
{"BOOOM",8389410},
{"BOUNCE",8389415},
{"BRRREEET",8389396},
{"BRRRT",8389395},
{"BUZZER",8389420},
{"BWEEP",8389397},
{"Background",8683656},
{"Bishop",8683766},
{"Bizarro",8618233},
{"BizarroSwap",10518778},
{"Broadcast",10518680},
{"BroadcastAnd",8421529},
{"BroadcastAndEx",8421530},
{"BroadcastEx",10518684},
{"BroadcastList",8421533},
{"BroadcastListEx",8421534},
{"BroadcastSum",8421535},
{"BroadcastSumEx",8421536},
{"Busy",8618094},
{"CHEEP",8389393},
{"CHYEW",8389392},
{"CLICK",8389388},
{"COLLIDE",8389142},
{"COLLIDEBY",8389141},
{"COLLIDING",8389143},
{"CONFLICT",8389140},
{"CONNECT",8389145},
{"CREATE",8389121},
{"CREATED",8389137},
{"Chebyshev",8487074},
{"Class",8486976},
{"Climb",9142356},
{"CodePage",8683657},
{"CollisionLayers",8487036},
{"Coloc",8487075},
{"Compatible",8487035},
{"Connect",8487076},
{"Connection",8618104},
{"Control",8421515},
{"CopyArray",8421617},
{"Create",10518693},
{"Crush",8618109},
{"DEEP_POP",8389417},
{"DEPARTED",8389125},
{"DESTROY",8389122},
{"DESTROYED",8389136},
{"DINK",8389390},
{"DOOR",8389378},
{"DRLRLRINK",8389398},
{"DYUPE",8389413},
{"Data",8421542},
{"DefaultImage",8683664},
{"DelInventory",8421543},
{"Delta",8421544},
{"Density",9142348},
{"Departed",8618091},
{"Departures",8618093},
{"Destroy",10584233},
{"Destroyed",8487033},
{"Dir",8618054},
{"Distance",9142346},
{"Done",8618103},
{"DotProduct",8421618},
{"E",9437184},
{"END_TURN",8389139},
{"EditorHelp",8683666},
{"F",9437192},
{"FAROUT",8389421},
{"FFFFTT",8389399},
{"FLOATED",8389132},
{"FROG",8389383},
{"FakeMove",8487082},
{"FindConnection",8487083},
{"Finished",8552583},
{"FlushClass",8421548},
{"FlushObj",8487085},
{"From",8421504},
{"GLASS",8389379},
{"GLISSANT",8389419},
{"GetArray",8487148},
{"GetInventory",8421550},
{"HAWK",8389425},
{"HEARTBEAT",8389407},
{"HIT",8389134},
{"HITBY",8389135},
{"Hard",8618072},
{"Height",9142354},
{"HeightAt",8421551},
{"Help",8683665},
{"HitMe",8421552},
{"INIT",8389120},
{"IgnoreKey",8421553},
{"Image",8618055},
{"InPlace",8683663},
{"Inertia",9142344},
{"InitArray",8421613},
{"Input",8683661},
{"IntMove",10584242},
{"Invisible",8618095},
{"JAYAYAYNG",8389416},
{"JUMPED",8389128},
{"JumpTo",10584243},
{"KEWEL",8389422},
{"KEY",8389129},
{"KLECK",8389387},
{"KLINKK",8389385},
{"Key",8421510},
{"KeyCleared",8618096},
{"L",9437194},
{"LASTIMAGE",8389126},
{"LB",9437195},
{"LF",9437193},
{"LOCK",8389408},
{"LOOP",8388610},
{"Level",8421509},
{"LevelTable",8683660},
{"Loc",8487092},
{"LocateMe",8487093},
{"LoseLevel",8421558},
{"MOVED",8389127},
{"MOVING",8389130},
{"Manhattan",8487095},
{"MaxInventory",8421560},
{"Misc1",9142364},
{"Misc2",9142366},
{"Misc3",9142368},
{"Misc4",9142370},
{"Misc5",9142372},
{"Misc6",9142374},
{"Misc7",9142376},
{"Morton",8487097},
{"Move",10584250},
{"Move+",10584251},
{"MoveNumber",8552580},
{"MoveTo",10584252},
{"Moved",8618101},
{"Moving",8618102},
{"Msg",8421503},
{"N",9437186},
{"NE",9437185},
{"NEXTWARP",8389146},
{"NW",9437187},
{"NewX",8421567},
{"NewXY",8421568},
{"NewY",8421569},
{"OLDPHONE",8389402},
{"ONCE",8388609},
{"OSC",8388616},
{"OSCLOOP",8388618},
{"ObjAbove",8487106},
{"ObjBelow",8487107},
{"ObjBottomAt",8421572},
{"ObjClassAt",8421573},
{"ObjDir",8487110},
{"ObjLayerAt",8421575},
{"ObjMovingTo",8421576},
{"ObjTopAt",8421577},
{"Order",8683658},
{"Others",8683667},
{"P",8880371},
{"P*",8880372},
{"PLAYERMOVING",8389133},
{"POSTINIT",8389138},
{"POUR",8389377},
{"POWER",8389386},
{"Player",8487034},
{"PopUp",8421578},
{"Queen",8683767},
{"Quiz",8683662},
{"R",9437198},
{"RATCHET1",8389418},
{"RATCHET2",8389412},
{"RATTLE",8389403},
{"RB",9437197},
{"RF",9437199},
{"Rel",8487116},
{"Rook",8683765},
{"S",9437190},
{"SE",9437191},
{"SMALL_POP",8389389},
{"SPLASH",8389376},
{"STEAM",8389424},
{"STOP",8388608},
{"SUBS",8683668},
{"SUNK",8389131},
{"SW",9437189},
{"Seek",8487117},
{"Self",8421502},
{"Send",10584270},
{"SendEx",10584271},
{"SetArray",8487150},
{"SetInventory",8421584},
{"Shape",8618051},
{"ShapeDir",8618074},
{"Sharp",8618073},
{"Shovable",8618075},
{"Sound",8421585},
{"Stealthy",8618100},
{"Strength",9142358},
{"Super",8487165},
{"SwapWorld",8421627},
{"Sweep",8421586},
{"SweepEx",8421587},
{"Synchronize",8421588},
{"TAHTASHH",8389409},
{"THMP_thmp",8389405},
{"THWIT",8389384},
{"TICK",8389391},
{"Target",8487125},
{"Temperature",9142337},
{"Trace",8421590},
{"TraceStack",8487127},
{"Trigger",8421592},
{"TriggerAt",8421593},
{"UH_OH",8389382},
{"UNCORK",8389414},
{"UNHH",8389381},
{"UserSignal",8618097},
{"UserState",8618098},
{"VACUUM",8389411},
{"VisualOnly",8618099},
{"Volume",9142350},
{"VolumeAt",8421594},
{"W",9437188},
{"WAHOO",8389400},
{"WHACK",8389423},
{"Walkable",8487131},
{"Weight",9142352},
{"WinLevel",8487132},
{"XDir",8487133},
{"XStep",8487134},
{"XYDir",8421599},
{"Xloc",8486980},
{"YDir",8487136},
{"YEEHAW",8389401},
{"YStep",8487137},
{"Yloc",8486981},
{"_",8421602},
{"a?",8421439},
{"again",8683533},
{"and",8683544},
{"band",8421415},
{"begin",8683532},
{"bit",8683563},
{"bit0",8388609},
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
{"bit8",8423400},
{"bit9",8423401},
{"bnot",8421418},
{"bor",8421416},
{"bxor",8421417},
{"c?",8421433},
{"case",8683542},
{"chain",8421536},
{"clear",8421608},
{"count",8421607},
{"cut",8683767},
{"cz?",8421434},
{"dup",8421377},
{"else",8683530},
{"eq",8421424},
{"eq2",8421425},
{"exec",8486940},
{"flip",8421606},
{"for",8683537},
{"fork",8683545},
{"ge",8486965},
{"gt",8486963},
{"if",8683529},
{"in",8421603},
{"is",8421431},
{"land",8421420},
{"le",8486966},
{"link",8683547},
{"lnot",8421423},
{"lor",8421421},
{"lsh",8421413},
{"lt",8486964},
{"lxor",8421422},
{"m?",8421435},
{"max",8486948},
{"mbegin",8683749},
{"min",8486947},
{"mod",8486945},
{"n?",8421432},
{"ne",8421426},
{"neg",8421410},
{"next",8683538},
{"nin",8421604},
{"nip",8421379},
{"o?",8421437},
{"or",8683543},
{"over",8421384},
{"oz?",8421438},
{"pick",8421383},
{"repeat",8683536},
{"ret",8421397},
{"rot",8421381},
{"rsh",8486950},
{"rtn",8683546},
{"s?",8421436},
{"swap",8421378},
{"then",8683531},
{"tmark",8421602},
{"tuck",8421380},
{"uniq",8421609},
{"until",8683534},
{"while",8683535},
};
#define N_OP_NAMES 363
#endif







|
|
|
|






|





|











|






|














|

|



|

804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
{"bit8",8423400},
{"bit9",8423401},
{"bnot",8421418},
{"bor",8421416},
{"bxor",8421417},
{"c?",8421433},
{"case",8683542},
{"chain",8421537},
{"clear",8421609},
{"count",8421608},
{"cut",8683768},
{"cz?",8421434},
{"dup",8421377},
{"else",8683530},
{"eq",8421424},
{"eq2",8421425},
{"exec",8486940},
{"flip",8421607},
{"for",8683537},
{"fork",8683545},
{"ge",8486965},
{"gt",8486963},
{"if",8683529},
{"in",8421604},
{"is",8421431},
{"land",8421420},
{"le",8486966},
{"link",8683547},
{"lnot",8421423},
{"lor",8421421},
{"lsh",8421413},
{"lt",8486964},
{"lxor",8421422},
{"m?",8421435},
{"max",8486948},
{"mbegin",8683750},
{"min",8486947},
{"mod",8486945},
{"n?",8421432},
{"ne",8421426},
{"neg",8421410},
{"next",8683538},
{"nin",8421605},
{"nip",8421379},
{"o?",8421437},
{"or",8683543},
{"over",8421384},
{"oz?",8421438},
{"pick",8421383},
{"repeat",8683536},
{"ret",8421397},
{"rot",8421381},
{"rsh",8486950},
{"rtn",8683546},
{"s?",8421436},
{"swap",8421378},
{"then",8683531},
{"tmark",8421603},
{"tuck",8421380},
{"uniq",8421610},
{"until",8683534},
{"while",8683535},
};
#define N_OP_NAMES 364
#endif